複雜手勢識別

2022-03-20 12:54:34 字數 1193 閱讀 7896

so good!

給遊戲加入複雜手勢識別的功能無疑可以大大增加遊戲的趣味性,對於像ios、andriod這樣的全觸控作業系統尤其如此。這篇文章不是講解手勢識 別的論證推倒過程(那些公式看著就頭疼,畢竟咱是寫程式的不是寫**的,這些東東是怎麼來的咱不管,能用就好),也不是講解ios上面 uigesturerecognizer類的應用(這個暫時只能識別輕觸滑動等簡單的手勢,雖然對於普通應用來說已經足夠了,但是對於遊戲來說還遠遠不 夠)。

這篇文章會幫助你讓遊戲識別三角形、五角星、圓圈、以及任意自定義的複雜圖形。並且由於無論是識別演算法還是其應用都非常簡單,所以你可以零成本的應用於任何你想要使用的地方。

手勢識別演算法是"$1 unistroke recognizer"。

這個演算法實現起來非常簡單,但是識別效率很高,這個就有點類似尋路演算法中的a*。它足以滿足我們在遊戲中的需求,所以沒有必要再去**神經網路、機器學習 什麼的了。(其實還有一種更簡單的識別演算法:我們定義八個方向,滑鼠移動的時候判斷後乙個點相對於前乙個點的方向,最終組合成乙個由字串組成的手勢** ----比如下上代表乙個手勢,下右代表乙個手勢,然後對這個**與模板進行匹配--這個時候匹配的就是字串的相似度,要簡單很多。這也是瀏覽器中手勢 識別常用的方法。不過這種方法應用到遊戲中效果不如$1,因為$1會對座標集合進行正規化,即便我畫的圖形歪了或者有些走樣,它都可以很好的識別出來)。

這裡推薦這個版本(others/cpp.bw.zip)。c++實現,**清晰,使用簡單。

1、在初始化的地方new乙個geometricrecognizer例項recognizer_,呼叫recognizer_->loadtemplates()方法。注意這個函式只是測試時使用,真正設計時,其手勢模板應該是從配置檔案中讀取。

2、在touchmove(或者是mousemove,依平台而定)的時候將座標push_back到乙個集合裡(touch_points_)。

3、在touchend的時候呼叫: recognitionresult r = recognizer_->recognize(touch_points_);

我們對其返回的結果進行判斷,如果(r.name != "unknown" && r.score > 0.5),那麼這就是我們識別出來的乙個手勢。name是手勢模板名稱,score是其權重,越高則與模板越匹配。

通過簡單的幾行**,我們就把手勢識別功能加入到遊戲中了,這時我們是用其釋放魔法,還是做一些特殊的動作都依賴與設計者的創造性了。很有趣,不是嗎?

讓遊戲支援複雜手勢識別

給遊戲加入複雜手勢識別的功能無疑可以大大增加遊戲的趣味性,對於像ios andriod這樣的全觸控作業系統尤其如此。這篇文章不是講解手勢識別的論證推倒過程 那些公式看著就頭疼,畢竟咱是寫程式的不是寫 的,這些東東是怎麼來的咱不管,能用就好 也不是講解ios上面uigesturerecognizer類...

swift 手勢識別

viewcontroller.swift jieuitapgesturerecognizer created by jiezhang on 14 10 4.import uikit class viewcontroller uiviewcontroller,uiactionsheetdelegate...

手勢識別器

注意要把物件imageview的互動開了 建立乙個imageview 新增手勢用 uiimage image uiimage imagenamed selected uiimageview imageview uiimageview alloc initwithframe uiscreen main...