[英]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.