自從看過leapmotion的宣傳視頻,就被吸引住了。覺得這東西遲早要替代鼠標,然后關注了一年多leapmotion的動態,終於在今年8月份入手了一只。//675大洋啊,心疼~
一直想寫份評測,一直想做個小應用玩玩,然而一直拖着沒做。
擱置了幾個月后,終於心血來潮,山寨了個簡單的小游戲,然后調用leapmotion來控制。//成就感倍增啊!!!
第零節——遲到的leapmotion簡單評測
下了幾個小游戲,以及試了下谷歌地球。
谷歌地球可以用leapmotion操作前進后退、轉向和縮放等,但是感覺不太適應操作。比如縮放,縮放完成后,手要離開leapmotion檢測區域,否則手恢復原狀態,縮放又倒回去了。
小游戲玩法都比較簡單,leapmotion個的新操作都用上了不少,比如檢測多個手指,手指的方向,轉圈和搖動等手勢。
偶爾會有手指位置卡一下或跳一下的現象(可能是檢測到腦袋了?)。玩久了胳膊很累。時間長了,leapmotion也比較熱。
實際用起來,沒有宣傳片中那么炫。期望比較大,有點小失望。不過想起了世界上第一輛火車跟馬車比賽,結果火車輸了的故事。作為一個新興事物,我還是很看好它的。
第一節——小游戲介紹
原來是一個HTML5的游戲,我覺得操作簡單。很適合用leapmotion來操作,就山寨過來了。
玩法:鼠標移動操作弧形擋板,擋住紅色小點,綠色小點補充生命,中間的生命值減到0則游戲結束。
以下是截圖:
附下載地址:下載
第二節——小游戲實現思路
如圖。
檢測到輸入時(鼠標移動或leapmotion動作),僅僅改變擋板的角度數值(全局變量)。
用了一個計時器來實時刷新每幀界面。
刷新前還需要對數值進行一些計算和檢測。
A、根據當前難度,小圓點數量不足時,創建一個新的小圓點,根據當前難度隨機生成一些屬性值。大小、角度、速度、顏色等。
B、檢測每個顯示的小圓點和擋板或核心的碰撞。進行移除小圓點,並計算分數和生命值的操作。
C、移動小圓點
計算完成,依次刷新界面元素。
界面比較簡短,都是用的一些集合圖形。
第三節——添加leapmotion的操控
首先添加引用 LeapCSharp.NET3.5.dll,
然后把 Leap.dll 和 LeapCSharp.dll 放到生成目錄里。
參考SDK里面的 Sample.cs 文件,做一下修改。
自定義一個EventArgs類,里面放一些需要獲取的參數。比如要輸出內容查看,可以加上 public string msg = "";
然后再定義:public event EventHandler<eventFrame> leapFrame = null;
把里面所有的類似 SafeWriteLine ("Exited"); 的語句,
改為這樣:if (null != leapFrame) leapFrame(null, new eventFrame("Exited"));
最后,在主程序里初始化listener后,就可以通過:
listener.leapFrame += new EventHandler<eventFrame>(listener_leapFrame);
來獲取leapmotion動作了。如果要在界面上輸出查看的話,記得invoke一下,否則不同線程無法操作主界面UI。
我則是獲取了一下平均坐標值 Vector avgPos ,用popup控件模擬一個鼠標,然后修改下擋板的角度,就大功告成了!
-------------------------------- 結尾 -----------------------------------
寫的比較倉促,如果有什么不足的地方,還請大家多多指正。
如果大家對leapmotion的應用,有什么新的點子及想法,還請多多指教。
附上源程序:源程序