我有问题。我已经进行了摩擦运动,并且第一次运行时代码运行完美,但第一次运行后运行不正常。我已经添加了跟踪命令以进行调试,并且在第一次运行 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;
}
}
}
答案 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并且不应该出错。