无法在 Andengine 中正确设置空闲和运行动画



当我的角色空闲时,我试图为他设置一个动画,当他左右移动时,我尝试为他设置另一个动画。现在我在我的游戏更新中有以下代码:

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;
 }

最新更新