嗯,很难解释,所以我会尽我所能......
我有这个方法:
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变量设置为角色的直立帧。
我一直在考虑何时重置此变量,但我不知道:/
答案 0 :(得分:2)
你需要保留另一个变量“previousDirection”,它在方法的末尾设置。 输入方法时,请检查方向是否有变化,并相应地设置lastFrameChange和currentFrame。