2013-10-12 22 views
1

我遇到問題。我使用摩擦進行了移動,並且在第一次運行時緩解了代碼運行的困難,但是在第一次運行之後無法正常運行。我已添加跟蹤命令進行調試,並在第一次運行後返回NaN。緩解運動時獲得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

你可以添加一些代碼,關於vx的聲明,並將其作爲局部變量或全局使用 –

+0

我沒有看到關於'vx'的代碼有什麼問題......也許問題在於你的其他地方在說'vx = null'? – Pier

+1

在將'vxInitial'的值賦給'vx'之前,你初始化了'vxInitial'嗎?試試'public var vxInitial:Number = 0'; //這是稍後初始化的',並且對於vyInitial是一樣的。 – Vesper

回答

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它不應該錯誤。