Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 碰撞检测简单蛇游戏_Javascript_Html_Collision Detection - Fatal编程技术网

Javascript 碰撞检测简单蛇游戏

Javascript 碰撞检测简单蛇游戏,javascript,html,collision-detection,Javascript,Html,Collision Detection,与我的一个朋友一起,我们正在创建一个多人蛇游戏。我们都是JavaScript的初学者,所以这对我们来说是一个真正的挑战。 到目前为止,我已成功创建了以下内容: 这是我到目前为止的碰撞检测代码: Snake.prototype.collision = function (x, y, array) { for(var i = 0; i < Snake.length; i++){ if(Snake.pieces[0].x == x &&

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

这是我到目前为止的碰撞检测代码:

    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;
   };
Snake.prototype.collision=函数(x,y,数组){
对于(变量i=0;i

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

简而言之,你根本没有检查碰撞

工作碰撞:

说明:

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

// 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');
        }
    }
}
//第32行
如果(game.snakes.length!==0){
对于(i=0;i
然后在碰撞方法中检查第一个工件是否与其他工件碰撞。这个循环从第四部分开始,因为蛇头不能真正接触到它的“脖子”(第二和第三部分)

Snake.prototype.collision=函数(){
//把第四条蛇的碎片圈起来。
for(var i=3;i

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

非常感谢!这帮了大忙!您是否知道如何创建一个冲突脚本,允许我和我的朋友检查两个不同蛇行之间的冲突?这将是一个带有node.js的多人蛇游戏,每个用户都会得到一条单独的蛇,它可以与自身以及其他用户发生碰撞。这很难测试,但也许你可以帮我们一点忙。仍然非常感谢你的帮助!我明白我做错了什么!这真的帮了大忙:因为你在游戏中存储蛇。snakes对象你可以检查蛇的“头部”x/y坐标与其他蛇的棋子,使游戏循环。snakes[i]。棋子。这是最简单但不是最有利于性能的解决方案。不过,我想性能不是蛇游戏的问题这也是我和我的朋友也在考虑的。但我们的问题是将其实现到代码中。你能告诉我们如何使用这个代码吗?也许我对你要求太多了,对此我很抱歉。这对我们真的很有帮助!我们自己的蛇之间的碰撞工作,我们真的很高兴!非常感谢:D
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;
};