Phaser计时器不会改变对象的位置,只会改变位置的值。

3
我正在使用Phaser创建游戏。当用户按下向下箭头时,我想要改变角色的物理大小,然后在1秒后返回原大小。
我编写了可行的代码,但角色会掉出屏幕,因为他处于一个对象中。所以我需要将他拉起来并改变物理大小。
使用以下代码:
else if (this.cursors.down.isDown) {
    this.jim.body.setSize(226, 150, 0, 0);
    this.timerCrouch= this.game.time.events.add(Phaser.Timer.SECOND * 1.25, jimСrouch, this);
    this.timerCrouch.timer.start();
}

function jimСrouch() {  
    this.jim.body.setSize(226, 285, 0, 0);
    this.jim.body.y = this.jim.body.y + 150;
};

角色没有上升,但在日志中jim.body.y的值发生了变化,并返回到之前的值。

如何修复这个问题?谢谢!


我试着清理了一下你的问题。你尝试过在对象上启用调试来查看实际边界框的位置吗?你从未将jim移回去(jim.body.y不断向下移动)。我还认为,与其移动实际精灵,你可以只改变边界框的大小。请参见http://phaser.io/examples/v2/arcade-physics/offset-bounding-box以获取示例。蹲下?那么碰撞框就是角色精灵的底半部分,例如。 - James Skemp
1个回答

0

我认为这可能是因为this.cursors.down.isDown。我不相信这在语法上是正确的,因为down.isDown是多余的。

在我的游戏中,我使用game.input.onDown.add(functionName);,它可以正常工作。


实际上,只要 cursors = this.input.keyboard.createCursorKeys();this.cursors.down.isDown 就可以了。如果是这样的话,那么如果 <kbd>down</kbd> 键当前被按下,它将返回 true。 - James Skemp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接