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

时间:2015-11-29 20:26:58

标签: animation sprite andengine

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

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”代码,我可能会停止错误的代码。

1 个答案:

答案 0 :(得分:0)

我在100次测试后终于解决了它。诀窍是检测玩家何时从'#34;空闲"移动"移动"并且在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;
 }