javascript - 如何為大量的sprite添加碰撞檢測(cè)框?
問(wèn)題描述
我有一張精靈表,里面的每幀都有不同的尺寸,如下圖:
現(xiàn)在我想為它們添加碰撞檢測(cè)框,但圖片較多,而且碰撞的位置不限于圖片邊框,請(qǐng)問(wèn)這種情況如何添加檢測(cè)框,是否需要給每幀按需求添加?添加完成后又如何獲取碰撞框的位置?有沒(méi)有工具可以實(shí)現(xiàn)?非常感謝~
問(wèn)題解答
回答1:基本上游戲開發(fā)最難的部分之一就是碰撞檢測(cè)了,你如何選擇碰撞檢測(cè)請(qǐng)務(wù)必根據(jù)你項(xiàng)目的需求來(lái)決定,一般對(duì)于多邊形用得比較多的是分離軸定理(SAT),像你這種如果要求不是特別高的話用正常等大的矩形檢測(cè)就好了,如果非要變化的話就為每個(gè)狀態(tài)保存一個(gè)碰撞檢測(cè)框用于碰撞檢測(cè),比如說(shuō):
var monster = { steps : {'walk' : { 'width' : '', //碰撞檢測(cè)時(shí)用于計(jì)算的寬度 'height' : '', //高度 'imgs' : [] //精靈,可能'walk'這個(gè)動(dòng)作中包含了多幀,進(jìn)行游戲循環(huán)的時(shí)候需要逐步變化 'idx' : 0 //用于判斷imgs當(dāng)前到哪個(gè)步驟的下標(biāo)索引},'jump' : { //同樣的},'run' : { //等等}//........ }, //保存不同狀態(tài)下的顯示效果和碰撞邊框 'currentStatus' : 'walk', //當(dāng)前的狀態(tài),方便相關(guān)功能的載入 'setup' : function(){this.x += '';this.y += ’’;//用于計(jì)算和更新位置 }, 'draw' : function(){//用于繪制 } //......};//碰撞檢測(cè)一般都在游戲循環(huán)里單獨(dú)調(diào)用一個(gè)方法,通過(guò)循環(huán)獲取活動(dòng)對(duì)象的x,y,width,height來(lái)進(jìn)行檢測(cè),這里你可以通過(guò)判斷一個(gè)矩形是否存在一個(gè)頂點(diǎn)在另一個(gè)矩形內(nèi)部來(lái)得知是否碰撞,當(dāng)然用sat也是可以的,不過(guò)麻煩了點(diǎn)
當(dāng)然我這里僅僅給你參考意見,我不是主攻游戲開發(fā),以前有興趣的時(shí)候自學(xué)過(guò)一段時(shí)間,如果有什么地方有問(wèn)題歡迎指出來(lái),就這樣吧。
相關(guān)文章:
1. 網(wǎng)頁(yè)爬蟲 - python爬蟲翻頁(yè)問(wèn)題,請(qǐng)問(wèn)各位大神我這段代碼怎樣翻頁(yè),還有價(jià)格要登陸后才能看到,應(yīng)該怎么解決2. python如何不改動(dòng)文件的情況下修改文件的 修改日期3. python 正則表達(dá)式提取4. 算法 - python 給定一個(gè)正整數(shù)a和一個(gè)包含任意個(gè)正整數(shù)的 列表 b,求所有<=a 的加法組合5. javascript - 微信h5發(fā)送圖文信息,部分設(shè)備點(diǎn)擊“發(fā)送”按鈕時(shí)沒(méi)反應(yīng),問(wèn)題較難重現(xiàn),如何能找到可能存在問(wèn)題的點(diǎn)?6. javascript - 微信小程序里怎么把頁(yè)面轉(zhuǎn)成圖片分享7. 大家好,請(qǐng)問(wèn)在python腳本中怎么用virtualenv激活指定的環(huán)境?8. python - 求一個(gè)在def中可以實(shí)現(xiàn)調(diào)用本def滿足特定條件continue效果的方法(標(biāo)題說(shuō)不太清楚,請(qǐng)見題內(nèi)描述)9. javascript - JS用ajax爬取百度外賣店家信息10. python - Pycharm調(diào)試代碼進(jìn)行列表遍歷時(shí),如何直接賦值指定元素
