簡體   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