我正在尝试用 javascript 制作贪吃蛇游戏,但我在碰撞检测方面遇到了困难。到目前为止,我已经尝试了各种方法,但无奈之下,我决定存储每帧片段的所有位置,然后在为下一帧制作动画之前检查是否有任何重复项。不幸的是,这种方法也没有成功。
也许这是由于对 JS 如何处理数组的误解。有一段时间我一直在使用 if(x in y)
但据我所知,如果数组中存在完全相同的对象,则返回。
这是现场演示:http://jsfiddle.net/AScYw/2/
这是更容易阅读的代码:http://pastebin.com/ygj73me6
有问题的代码在 snake 对象中,作为函数 collide
。
this.collide = function(){
for(var z=0; z<this.positions.length-1; z++){
for(var q=z+1; q<this.positions.length-1; q++){
return this.positions[z][0] == this.positions[q][0] && this.positions[z][1] == this.positions[q][1];
}
}
最佳答案
你在这里的功能需要一些工作,它可能会解决你的问题。
this.collide = function(){
for(var z=0; z<this.positions.length-1; z++){
for(var q=z+1; q<this.positions.length-1; q++){
return this.positions[z][0] == this.positions[q][0] && this.positions[z][1] == this.positions[q][1];
}
}
}
有两处不对。
- 您将退出第一个比较循环。你会想要做一些事情,比如 if (something overlaps) return true then outside of both loops return false if you make it successfully
- 您需要确保 z 段 != q 段,否则您将始终发生碰撞
看起来很酷。接下来让我们看看马里奥 ;)
关于Javascript 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047928/