讓遊戲支援複雜手勢識別

2021-06-27 01:11:13 字數 1149 閱讀 2630

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

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

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

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

這裡推薦這個版本(實現,**清晰,使用簡單。

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是其權重,越高則與模板越匹配。

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

讓mysql支援中文

我用spring ibatis mysql搭了乙個框架,但是中文顯示亂碼。解決問題的路徑 1 在資料庫連線的url 後加上 useunicode true characterencoding utf8 2 修改mysql的配置檔案my.ini 在 client 後加上default characte...

讓irrlicht 支援中文

看了官方引擎顯示文字的方法居然是影射位圖。實在悲劇,開發者居然沒考慮其他語言的問題,因為很多語言根本不由小量的字母組成,就算硬用中文字影射的方法,這個檔案不知道會有多大。再就是在渲染環境裡我們也沒可能讓美工來打字吧?再退一步好了,如果要設定字型大小這樣的設定,影射根本不實際。無奈下在官方的找有無方法...

讓程式支援UNICODE

nt系統的核心是unicode 通常vc分建立的工程預設都是ansi 可以相容win9x 在nt下ansi程式在呼叫windows api的時系統實際又進行了一次ansi到unicode的 轉化,如movewindowa實際上又呼叫movewindoww.如果以我們的程式不考慮win9x 早晚是明日...