2

Android トゥイーン アニメーションにユニバーサル トゥイーン エンジンを使用できますか?

Tween.to(getResources().getDrawable(R.drawable.ic_launcher),  ParticleAccessor.POSITION_XY, 0.5f)
     .target(0, 0)
     .ease(Bounce.OUT)
     .delay(1.0f)
     .repeatYoyo(2, 0.5f)
     .start(manager);

このコードを wiki ページからコピーし、ターゲットを描画可能なリソースに変更しました。このドローアブルを Target Object に変更するにはどうすればよいですか?

4

1 に答える 1

5

Universal Tween Engineで何かを計算できる唯一の要件は、作成したTweensTimelinesが定期的に (フレームごとに) 更新されることです。

ほとんどの場合、a を使用しTweenManagerてすべてのトゥイーンの更新プロセスを処理する必要があります。したがって、.update()各フレームでマネージャーのメソッドを呼び出すだけで済みます。Android ゲームの場合、すべてのゲームに「ゲーム ループ」、つまり各フレームで世界を再計算して再描画する無限ループがあるため、これは非常に簡単です。したがって、必要なことは、このループに manager update 呼び出しを挿入することだけです。ただし、純粋な android UI アプリケーションはループを公開しないため、更新呼び出しをどこにでも挿入することはできません。

ただし、内部に無限ループを含む別のスレッドを作成し、その中に manager.update() メソッドを配置する必要があります。それはそよ風なしで動作するはずです:)

まず、マネージャーをどこかに作成する必要があります。

private final TweenManager tweenManager = new TweenManager();

あなたのアクティビティの onPause() メソッドでアニメーションを停止するためのブール値と同様に:

private boolean isAnimationRunning = true;

次に、スレッドを作成する必要があります (たとえば、Activity コンストラクターで)。

new Thread(new Runnable() {
    private long lastMillis = -1;

    @Override
    public void run() {
        while (isAnimationRunning) {
            if (lastMillis > 0) {
                long currentMillis = System.currentTimeMillis();
                final float delta = (currentMillis - lastMillis) / 1000f;

                view.post(new Runnable() {) {
                    @Override public void run() {
                        tweenManager.update(delta);
                    }
                };

                lastMillis = currentMillis;
            } else {
                lastMillis = System.currentTimeMillis();
            }

            try {
                Thread.sleep(1000/60);
            } catch(InterruptedException ex) {
            }
        }
    }
}).start();

次に、Android UI コードのどこにでもトゥイーンを作成できます。ご覧のとおり、更新呼び出しは で囲まれているview.post()ため、更新はメインの Android UI スレッドで行われるため、同期の問題は発生しません。

ゲーム以外でエンジンを試したことはありませんが、このソリューションは問題なく動作するはずです。

于 2012-05-23T06:12:23.853 に答える