首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phaser3旋转动画

Phaser3旋转动画
EN

Stack Overflow用户
提问于 2018-06-16 18:53:01
回答 1查看 612关注 0票数 0

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

代码语言:javascript
复制
    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");
        }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-20 05:33:49

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

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

我很确定这是导致问题的原因。即使不是这样,在检查条件时,使用if-else也比使用两个单独的if语句更好(更优雅、更“干净”)。

因此,将您的代码更改为如下所示:

代码语言:javascript
复制
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");
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50887259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档