Javascript 碰撞检测

标签 javascript collision-detection

我正在尝试用 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];
    }
  }
}

有两处不对。

  1. 您将退出第一个比较循环。你会想要做一些事情,比如 if (something overlaps) return true then outside of both loops return false if you make it successfully
  2. 您需要确保 z 段 != q 段,否则您将始终发生碰撞

看起来很酷。接下来让我们看看马里奥 ;)

关于Javascript 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7047928/

相关文章:

Javascript Funky 数组灾难

JavaScript 多边形碰撞检测

ios - Sprite Kit 碰撞检测

javascript - 如何使用树数据结构提高复杂几何体的碰撞检测性能?

c++ - OpenGL C++ 圆与圆碰撞

javascript - 如何包装管道流以使其看起来像单个流?

javascript - 用更明显的东西替换照片滑动共享图标

javascript - 如何同时触发多个命名空间函数?

javascript - 循环遍历 html 元素时替换粘贴中的文本

c# - 在 Unity 中检测重叠二维对象的输入碰撞