我正在尝试用 javascript 制作一个贪吃蛇游戏,但我在碰撞检测方面遇到了困难。到目前为止,我已经尝试了各种方法,但在绝望中,我决定存储每帧片段的所有位置,然后在制作下一帧动画之前检查是否有重复项。不幸的是,这种方法也没有被证明是成功的。
也许这是由于对 JS 如何对待数组的误解造成的。有一段时间我使用if(x in y)
但据我所知,如果数组中存在完全相同的对象,则返回。
这是现场演示:http://jsfiddle.net/AScYw/2/ http://jsfiddle.net/AScYw/2/
这是更容易阅读的代码:http://pastebin.com/ygj73me6 http://pastebin.com/ygj73me6
有问题的代码位于蛇对象中,作为函数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];
}
}
}
有2件事是错误的。
- 您将退出第一次比较的循环。您将需要执行类似 if (某些内容重叠)返回 true 的操作,然后如果成功通过,则在两个循环之外返回 false
- 您需要确保 z 段!= q 段,否则总会发生碰撞
看起来不错。接下来让我们看看马里奥;)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)