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