【问题标题】:Collision detection simple snake game碰撞检测简单的蛇游戏
【发布时间】:2014-01-18 11:43:15
【问题描述】:

与我的一个朋友一起,我们正在创建一个多人蛇游戏。我们都是 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;
   };

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

【问题讨论】:

    标签: javascript html collision-detection


    【解决方案1】:

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

    工作碰撞: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');
            }
        }
    }
    

    然后在碰撞方法中检查第一块是否与其他块发生碰撞。循环从第 4 段开始,因为蛇的头不能真正碰到它的“脖子”(第 2 段和第 3 段)。

    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 时,您正在检查构造函数的属性。

    【讨论】:

    • 非常感谢!这帮了大忙!您是否知道如何创建一个允许我和我的朋友检查两个不同蛇形之间的碰撞的碰撞脚本?它将成为一个带有 node.js 的多人蛇游戏,每个用户都会得到一条可以与自己以及其他用户碰撞的单独的蛇。这很难测试,但也许你可以帮助我们一点。
    • 仍然非常感谢您的帮助!我明白我做错了什么!这真的很有帮助:D
    • 由于您将蛇存储在 game.snakes 对象中,您可以检查蛇的“头部”x/y 坐标与其他蛇的碎片,循环 game.snakes[i].pieces。这是最简单但不是对性能最友好的解决方案。不过,我认为性能不是蛇游戏的问题。 ;)
    • 这是我和我的朋友也想过的事情。但我们的问题是将其实现为代码。你能告诉我们这个代码是如何工作的吗?也许我对你要求太多了,对此我很抱歉。它真的会帮助我们!我们自己的蛇之间的碰撞工作,我们真的很高兴!非常感谢:D
    猜你喜欢
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多