【问题标题】:Phaser3 Rotation AnimationPhaser3 旋转动画
【发布时间】:2018-11-25 23:43:49
【问题描述】:

我正在尝试创建一个钟摆来回摆动的简单动画效果。我只使用了一个图像精灵,我有下面的代码,但动画只倾斜到 45 角然后完全停止。我可能做错了什么?

    var title = new Phaser.Scene("GameTitle");
var pendulum;
var direction;
title.create = function(){
    pendulum = this.add.sprite(200, 0, 'titlePendulum').setOrigin(0.5, 0).setScale(1.8).setRotation(79);
    direction = "left";
};

title.update = function(){
    console.log(pendulum.angle.toFixed(0));
    swing(direction);
    if(pendulum.angle.toFixed(0) == 71){
        swing ("right");
    }
    if(pendulum.angle.toFixed(0) == -76){
        swing("left");
    }
};

function swing(dir){
    if(dir == "left"){
        if(pendulum.angle.toFixed(0) == 71){
            swing("right");
        }else{
            pendulum.angle +=1.5;
        }

    }else{
        if(pendulum.angle.toFixed(0) > -80){
            pendulum.angle -= 1.5;
        }
        if(pendulum.angle.toFixed(0) == -76){
            swing("left");
        }
    }
}

【问题讨论】:

  • 不确定是什么问题,但为什么要为每个 update() 帧更新swingInc++?您正在检查 swingInc
  • 我最初试图运行动画 4 次,但没有意识到它是按帧递增的。从那以后,我尝试了几件事,并在帖子中提出了当前代码,但是,同样的问题。它倾斜到指定的角度,然后停止。
  • 我已经编辑了我的答案,你可能想看看 dirdirection 的东西。

标签: javascript animation phaser-framework


【解决方案1】:

我注意到您在两个单独的 if 语句中检查 pendulum.angle 是否大于或完全等于 80。但是 80 不能被 1.5 整除,角度的值可以是.. 76, 77.5, 79, 80.5 ..,条件pendulum.angle.toFixed(0) == 80 永远不会为真。

此外,函数参数的名称是 dir,但您检查的是 direction

我很确定这是导致问题的原因。即使不是这样,当您检查可能是一件事或另一件事的条件时,使用 if-else 仍然更好(更优雅和“更干净”),而不是使用两个单独的 if 语句。

所以把你的代码改成这样:

function swing(dir) {
    if (dir == "left") { // check parameter, not the direction global var
        if (pendulum.angle.toFixed(0) < 80) {
            pendulum.angle +=1.5;
        } else {
            swing("right");
        }
    } else { // dir == "right"
        if (pendulum.angle.toFixed(0) > -80) {
            pendulum.angle -= 1.5;
        } else {
            swing("left");
        }
    }
}

【讨论】:

  • 很好地抓住了 dir 变量。我再次更新了帖子中的代码以反映当前设置。不过,我注意到了一些有趣的事情。当我调整反向摆动的目标角度时,钟摆的角度也在调整。当设置为 79 度时,摆鞋已停在 76。当我调整到 76 时,它改变并停在 74。将其设置为 74 导致它停在 73,依此类推。不知道是什么原因造成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2011-05-20
  • 2013-05-22
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多