1 回答
TA貢獻2080條經驗 獲得超4個贊
OK 所以如果你不介意的話,我會盡量籠統的回答這個問題,制作這個游戲的具體代碼可以試著去適應。
基本上,假設您想要進行邊界框碰撞(框到框),您需要檢查每個的 x 和 y,以及每個的寬度和高度。
意思是,假設我有兩個對象,每個對象都有 x、y、width 和 height 屬性,x 和 y 在左上角,然后檢查它們是否發生碰撞,創建一個函數:
function areBoxesColliding(box1, box2) {
return (
box1.x < box2.x + box2.width &&
box1.x + box1.width > box2.x &&
box1.y < box2.y + box2.height &&
box1.y + box1.height > box2.y
)
}
現在,當您想檢查兩個對象是否正在命中(無論是子彈還是角色本身)時,首先要確保每個對象都具有與其實際位置相匹配的 x、y、寬度和高度屬性和大小,然后在循環中(或無論何時檢查),只需檢查
if(areBoxesColliding(someObjectLikePlayerOrBullet, someObjectLikeAnEnemy)) doIt();
只需將此基本方法適應您當前的代碼,我不知道myVirus.crashWith您的代碼是什么樣的,但只要確保它基本上是這樣的,以及檢查您的子彈是否擊中敵人的代碼。
順便說一句,您再次提到將您的角色放入數組中,但這真的很簡單,只需為每個敵人創建一個類構造函數,在渲染時循環遍歷該列表,并在檢查碰撞時循環遍歷它,當您想添加一個新敵人,只需調用.push數組
添加回答
舉報
