1

AndEngineライブラリを使用してライブ壁紙サービスを作成しました。画面には、左から右に繰り返し飛んでいる鳥のスプライトがあります。ソリューションにLoopEntityModifierとPathModifierを使用しています。鳥は、左側の画面から表示されるたびにY位置からランダムに開始するようにコード化されています。

コードは次のようになります。

public class MyLiveWallpaperService extends BaseLiveWallpaperService {
    private AnimatedSprite birdSprite;
    ...

    public Scene onLoadScene() {
        ...
        float[] coordY = generateRandomCoordY();  // my custom function to generate random array of Y-coordinates
        Path path = new Path(coordX, coordY);  // set the coordinate to Path object

        // register the modifiers (for the one who is curious, 1st argument of PathModifier is the duration, 
        // but it has nothing to do with the question)

        birdSprite.registerEntityModifier(new LoopEntityModifier(new PathModifier(10, path)));
        ...
    }
}

問題は、LoopEntityModifier&PathModifierが実行されたときに、パスのY座標値を変更できなくなることです。ループが開始するたびに、新しいパスのY座標値を再度設定できるようにします。

4

1 に答える 1

2

onModifierFinished()をオーバーライドし、変更されたパスで新しいPathModifierを作成することで、この問題を回避できると思います。次のようになります。

public LoopEntityModifier createModifier(Path path) {
    return new LoopEntityModifier(new PathModifier(path)) {
        @Override
        public void onModifierFinished(final IModifier<IEntity> pEntityModifier, final IEntity pEntity) {
            birdSprite.registerEntityModifier(createModifier(path));
        }
    }
}

birdSprite.registerEntityModifier(createModifier());

これは、すべてのループの最後にonModifierFinished()が呼び出された場合にのみ機能します。

于 2012-04-20T11:55:22.927 に答える