当我的角色空闲时,我试图为他设置一个动画,当他左右移动时,我尝试为他设置另一个动画。现在我在我的游戏更新中有以下代码:
if (!player_self_sprite.isAnimationRunning())
if (isPlayerMoving)
player_self_sprite.animate(new long[] { 100, 100, 100, 100}, 10 ,14, true);
else
player_self_sprite.animate(new long[] { 100, 100, 100, 100}, 14,18, true);
问题是,"空闲"动画直到"正在运行"的动画尚未完成(即使我的玩家已经停止)才会显示。另一种方式也是一样的:我的玩家可以移动,但动画是空闲的,直到它没有完成。
Andengine中没有一种方法可以区分两种类型的动画吗?如果我使用"stopAnimation"代码,我可能会停止错误的代码。
经过100次测试,我终于解决了这个问题。诀窍是在onUpdate中检测玩家何时从"空闲"转换为"移动",反之亦然。当这种情况发生时(比较两个布尔值),我会停止正在发生的动画,并根据isPlayerMoving布尔值启动另一个动画。摘要代码为:
private boolean wasPlayerMoving = false;
private boolean isPlayerMoving = false;
...
Sprite left = new Sprite(-10, CAMERA_HEIGHT - 160, mLeftTextureRegion) {
@Override
public boolean onAreaTouched(TouchEvent pEvent, float pX, float pY) {
if (!pEvent.isActionOutside() && !isDead && !isPaused) {
isPlayerMoving = true;
}
if (pEvent.isActionUp()) {
if (isPlayerMoving) {
isPlayerMoving = false;
}
}
return true;
}
// similar code when pressing Right sprite
...
this.mScene.registerUpdateHandler(new IUpdateHandler() {
public void onUpdate(float pSecondsElapsed) {
// THE TRICK
if (wasPlayerMoving!=isPlayerMoving)
player_self_sprite.stopAnimation();
if (!isNotJumping && !player_self_sprite.isAnimationRunning())
if (isPlayerMoving)
player_self_sprite.animate(...animation when moving..)
else
player_self_sprite.animate(...animation when idle..)
}
wasPlayerMoving = isPlayerMoving;
}