在缓和运动时获得NaN

时间:2013-10-12 14:04:53

标签: actionscript-3 flash

我有问题。我已经进行了摩擦运动,并且第一次运行时代码运行完美,但第一次运行后运行不正常。我已经添加了跟踪命令以进行调试,并且在第一次运行 vx 值后返回NaN。

leftPressed是一个布尔

righPressed是一个布尔值

vx是x速度

摩擦是缓和的速度

    public var vy:Number = 30;
    public var vyInitial:Number;//This is initialised later
    public var gravity:Number = 2.0;
    public var vx:Number = 0.4;
    public var vxInitial:Number;//This is initialised later
    public var friction:Number = 0.4;

以下是使用的代码:包括正常运行的跳跃易用代码。

        if (leftPressed)
        {
            if (vx == 0)
            {
                vx = vxInitial;
            }
            char.x -=  vx;
            lastMove = "Left";
        }
        else if (rightPressed)
        {
            if (vx == 0)
            {
                vx = vxInitial;
            }
            char.x +=  vx;
            lastMove = "Right";
        }
        else if (rightPressed == false && leftPressed == false)
        {
            if (lastMove == "Right" && rightPressed == false && leftPressed == false)
            {
                vx -=  friction;
                trace(vx);
                if (vx < 0)
                {
                    lastMove = "No Move";
                    trace("lastMove Right");
                    vx = 0;
                }
                else if (vx > 0)
                {
                    trace("moving left");
                    char.x +=  vx;
                }
            }
            else if (lastMove == "Left" && rightPressed == false && leftPressed == false)
            {
                vx -=  friction;
                trace(vx);
                if (vx < 0)
                {
                    lastMove = "No Move";
                    trace("lastMove Left");
                    vx = 0;
                }
                else if (vx > 0)
                {
                    trace("moving LEft");
                    char.x -=  vx;
                }
            }
        }

1 个答案:

答案 0 :(得分:0)

看来这一行:

if (vx == 0)
{
    vx = vxInitial;
}

第一次不会被调用,因为vx最初等于0.4(非零)。在第一次运行期间,vx设置为零,但是:

if (vx < 0)
{
     lastMove = "No Move";
     trace("lastMove Right");
     vx = 0;
}

因此,下次运行时,vx设置为vxInitial的值,该值似乎没有值:

public var vxInitial:Number;//This is initialised later (Is it?)

设置vxInitial并且不应该出错。