2011-07-08 54 views
0

嗯这是很难解释它,所以我会尽我所能...设置一个变量一旦

我有这样的方法:

private void manageActions(long delta) { 
    lastFrameChange += delta; 

    if(currentAction == States.Action.STANDING) { 
     lastFrameChange = 0; 
     resetDirections(); 
    } 

    if(currentAction == States.Action.WALKING) { 
     switch(currentDirection) { 
      case UP: 
       if(lastFrameChange > 75.0f) { 
        lastFrameChange = 0; 
        if(++currentFrame > 2) 
         currentFrame = 1; 
       } 
       break; 
      case DOWN: 
       if(lastFrameChange > 75.0f) { 
        lastFrameChange = 0; 
        if(++currentFrame > 5) 
         currentFrame = 4; 
       } 
       break; 
      case LEFT: 
       if(lastFrameChange > 75.0f) { 
        lastFrameChange = 0; 
        if(++currentFrame > 7) 
         currentFrame = 6; 
       } 
       break; 
      case RIGHT: 
       if(lastFrameChange > 75.0f) { 
        lastFrameChange = 0; 
        if(++currentFrame > 9) 
         currentFrame = 8; 
       } 
       break; 
     } 
    } 
} 

这是改变一个字符帧的方法基于他的方向和地位(站立,行走......)问题是,当我的角色向上移动然后向右移动时,它会穿过它们之间的所有框架。这是因为每当用正确的方向改变方向时,currentFrame变量不会被重置,并且最后一帧被保存。

还有一件事,resetDirections()将currentFrame变量设置为字符的常规框架。

我一直在想,如果重置此变量,但我没有任何想法:/

回答

2

你需要保持另一个变量,“previousDirection”,这是设置在方法结束。 当你输入方法时,检查是否有改变的方向,并相应地设置lastFrameChange和currentFrame。

+0

我想这样做没有更多的变量,保持简单,但我会尝试你的解决方案。谢谢! – Puyover

+0

我想没有其他变量就无法做到这一点。要检测变化,你需要知道以前的状态。 –