javascript - 碰撞检测简单蛇游戏

标签 javascript html collision-detection

我们正在与我的一个 friend 一起创建一款多人贪吃蛇游戏。我们都是 JavaScript 初学者,所以这对我们来说是一个真正的挑战。 到目前为止,我已经成功创建了这个:

http://jsfiddle.net/tbmluijten/RG76t/3/

这是我迄今为止的碰撞检测代码:

    Snake.prototype.collision = function (x, y, array) {
         for(var i = 0; i < Snake.length; i++){
            if(Snake.pieces[0].x == x && Snake.pieces[0].y == y)
            return true;
    }   
    return false;
   };

我遇到的问题是与蛇本身的碰撞。我不明白我做错了什么。请注意,我正在寻找与蛇本身的碰撞,而不是与边界的碰撞,因为我们将在其中放置一个循环。 :-)

最佳答案

简短的回答是 - 您根本没有检查碰撞!

工作碰撞:http://jsfiddle.net/RG76t/10/

说明:

首先需要将碰撞方法放入游戏循环函数中。

// line 32
if (game.snakes.length !== 0) {
    for (i = 0; i < game.snakes.length; i++) {
        var s = game.snakes[i];
        s.paint(ctx, game);

        // Check for collision.
        if (s.collision()) {
            // Do something, if the collision happens.
            alert('collision');
        }
    }
}

然后在碰撞方法中检查第一 block 是否与其他 block 发生碰撞。循环从第四 block 开始,因为蛇的头无法真正接触到它的“脖子”(第二 block 和第三 block )。

Snake.prototype.collision = function () {
    // Loop the snake pieces from the 4th one.
    for(var i = 3; i < this.length; i++){
        // Check if this piece collides with the first piece.
        if(
            this.pieces[0].x === this.pieces[i].x &&
            this.pieces[0].y === this.pieces[i].y
        ) {
            return true; // collision
        }
    }   
    return false;
};

另请注意,Snake.lengthSnake.pieces[i] 更改为 this.lengththis.pieces [i]。关键字 this 指的是您调用碰撞方法的 Snake 实例。当您在这段代码中使用 Snake 时,您正在检查构造函数的属性。

关于javascript - 碰撞检测简单蛇游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21203601/

相关文章:

javascript - jQuery nth-child 仅选择第一个元素

javascript - 如何删除点击时的谷歌地理编码

javascript - 将部分类名替换为按钮 onclick 的值

javascript - HTML5 Canvas 中的碰撞检测。优化太

java - 两个物体之间的碰撞停止

javascript - 使用 jQuery 更改 LESSCSS 变量

javascript - Html 和 js 文件/OS X

Javascript - 单击另一个子元素后获取子元素的值

python - 为迷宫墙壁添加碰撞

javascript - JavaScript 中带有空格的字符串