繁体   English   中英

当我更改精灵的位置时,它会继续自行移动

[英]When I change the position of a sprite, it continues moving on its own

我正在尝试使用Phaser.js创建一个Snake游戏,但是在移动头部时我陷入了困境。

为了使自己更轻松,我选择不使用任何速度并通过手动设置精灵的坐标来处理运动,我的理论是,一旦蛇长大并且每个部分都需要移动,这将使处理运动更容易移至其前面的路段以前所占据的位置。 我基本上计划将我的游戏世界视为一个网格,如果一切都具有速度,那将不是一件容易的事。

我有一个update函数,该函数应在每次调用精灵50次后移动一次。

function update() {
    snake.body.velocity.x = 0;
    snake.body.velocity.y = 0;

    if (cursors.up.isDown && direction !== 'down') {
        direction = 'up';
    } else if (cursors.down.isDown && direction !== 'up') {
        direction = 'down';
    } else if (cursors.left.isDown && direction !== 'right') {
        direction = 'left';
    } else if (cursors.right.isDown && direction !== 'left') {
        direction = 'right';
    }

    if (updateCount % 50 === 0) {
        moveSnake();
    }
    updateCount += 1;
}

function moveSnake() {
    switch(direction) {
        case 'up': snake.y -= 2; break;
        case 'down': snake.y += 2; break;
        case 'left': snake.x -= 2; break;
        case 'right': snake.x += 2; break;
    }
}

但这似乎触发了某种速度,即使我将其显式设置为0也是如此。蛇(假设它看起来像一个)将一次​​一直移动2个像素,直到下次调用moveSnake为止,此时它会加快速度并一次移动4个像素,直到到达游戏区域的边缘。

我已经在create函数中创建了精灵,并启用了街机物理引擎,如下所示:

game.physics.startSystem(Phaser.Physics.ARCADE);
game.world.setBounds(0, 0, 800, 600);

snake = game.add.sprite(400, 300, 'snake-body');
game.physics.enable(snake, Phaser.Physics.ARCADE);
snake.body.collideWorldBounds = true;

我已经验证了限制update工作原理,并且在每个游戏循环中都未调用moveSnake

github上的完整源代码(但坦白讲,这里没有比我刚刚粘贴的内容多的东西了)

编辑

为了消除混乱,在我的代码中moveSnake仅被调用3次(尝试添加断点),并且我希望精灵在这3次调用中仅移动了6个像素,但相反却移动了400个像素。 我的问题是,为什么精灵的x坐标会自动改变,而不仅是在我明确设置它的时候。

不要自己设置x和y,让物理学家通过赋予身体相应的速度来处理它。

function moveSnake() {
    snake.body.velocity.x = 0;
    snake.body.velocity.y = 0;

    switch(direction) {
        case 'up': snake.body.velocity.y = -2; break;
        case 'down': snake.body.velocity.y = 2; break;
        case 'left': snake.body.velocity.x = -2; break;
        case 'right': snake.body.velocity.x = 2; break;
    }
}

您也可以在Phaser论坛上提问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM