拉普達是什么?
《守護拉普達》是一款基于HTML5的體感塔防游戲,是騰訊編程馬拉松的優勝作品。
拉普達(Laputa)是天空之城的意思。玩家以保護拉普達為目標,通過肢體運動控制準星殺死不斷靠近總部的小怪。殺怪可以獲取游戲積分,連殺或觸發道具都能得到更多積分!分數最終會存入服務器,列入宇宙排名。
演示視頻
實現原理
視頻體感游戲的核心在于運動的捕獲與識別,主要的問題是如何實現運動捕獲算法。
關于運動捕方式有很多,于是就存在算法選型問題。我們先后實驗過三種方式:色域跟蹤、Mean shift、幀差。最終綜合了一套方案。下面簡單介紹下實現方案。
原理:分析連續關鍵幀間差異來確定運動區域。再通過運動特征系數加權,最終得到較為準確的坐標。
優點:環境干擾相對較小,且無需特征錄入。
處理流程:
1.通過瀏覽器getUserMediaAPI啟動攝像頭并獲取視頻流
2.利用canvas轉化圖像數據格式
3.利用幀差原理獲取運動區域(這里用到(grayscale公式)
灰度 = R*.299+G*.587+B*.114;
我們預先設定了一個亮度敏感度值 sen = 15;
當Math.abs(像素亮度1-像素亮度2)>sen 時,這個點將被納入運動區域。
4、降噪
柵格化圖像,判斷每個柵格的運動點密度,排除低于設定值的柵格。這樣就得到比較干凈的運動區域。
5.運動區域平衡分析
上一步返回的是坐標點陣群,游戲需要的是唯一坐標。數據需要進一步處理。經過觀察發現運動點陣分布在畫面的區間與動作目的有一定關聯性。也就是以畫面中心點為基準,判斷運動點陣距離中心點距離。以距離為加權因素,越靠邊緣因素值越大。最終得出唯一坐標。
6. 每個圖像算法最終都會遇到性能問題
這里我們用到了 worker。關于worker:THE BASICS OF WEB WORKERS
以上便是《守護拉普達》實現體感控制的基本原理。在比賽***一刻我們還在不斷優化算法,是一件很磨人的事情。不過結果還算令人滿意,帶走3個獎項 杰出項目、優秀創新、優秀技術。
PS:Demo代碼正在整理,體驗地址會稍后放出。
團隊靚照
《守護拉普達》已經入駐深圳騰訊形象店- @Image,歡迎前往體驗。