AnimatedSpriteの場合は前の記事のやり方でいいですが、
SpriteにModifierを登録している場合、IEntityModifierListenerを引数に渡すやり方がありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//フェードアウト後にSpriteを削除する sprite.registerEntityModifier(new AlphaModifier(5f, 1f, 0f, new IEntityModifierListener() { @Override public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) { } @Override public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { runOnUpdateThread(new Runnable() { @Override public void run() { //ここで削除する sprite.detachSelf(); } }); } })); |
ここではAlphaModifierを使ってますが、FadeOutModifierやFadeInModifierでも行けるんじゃないでしょうか。
しかし、汎用性がありそうなのはこちらのDelayModifierの方かもしれません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//指定時間後に削除する sprite.registerEntityModifier(new DelayModifier(5, new IEntityModifierListener() { @Override public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) { } @Override public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { runOnUpdateThread(new Runnable() { @Override public void run() { //ここで削除する sprite.detachSelf(); } }); } })); |
◆ 2015.04.22 追記
AndEngineの教本通りに作っている場合、getBaseActivity().runOnUpdateThreadにする必要がありました。
念のため記載しておきます。自分で忘れそうなので。
ついでに、detachChildからdetachSelfにこっそり変更。
なにやらこちらの方が良さそうだったので。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//指定時間後に削除する sprite.registerEntityModifier(new DelayModifier(5, new IEntityModifierListener() { @Override public void onModifierStarted(IModifier<IEntity> pModifier, IEntity pItem) { } @Override public void onModifierFinished(IModifier<IEntity> pModifier, IEntity pItem) { //教本通りの場合はこっち getBaseActivity().runOnUpdateThread(new Runnable() { @Override public void run() { //ここで削除する sprite.detachSelf(); } }); } })); |