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数组
添加回答
举报