0

初めて AndEngine を使用してアプリを作成しています。私のアプリはアニメーション指向です。つまり、クリックするとアニメーション化される多数の画像があります。これらのアニメーションのほとんどは、フレームごとのアニメーションです。パーティクル システム、重力などのアニメーションが必要なため、AndEngine を使用しています。誰かが AndEngine の簡単な onclick アニメーション コードを手伝ってくれたり、AndEngine のすべてのチュートリアルがフレームごとのアニメーションを持たないゲーム チュートリアルであるため、良いチュートリアルを教えてくれたりできますか? どんな助けでも大歓迎です。

4

2 に答える 2

2
  • 始める前に: この回答は AndEngine の TexturePacker 拡張機能を使用していることに注意してください。

フレームごとのアニメーションには、AndEngine でサポートされている Texture Packer というプログラムを使用しています。実際にはすべての画像をそこにドラッグするだけで、プロジェクト内で使用する必要がある 3 つのファイルがエクスポートされます。ファイルは次のとおりです。

これらのファイルが作成されたと仮定した後、それらをプロジェクトにコピーする必要があります。.png と .xml はおそらく assets/gfx/ の下の同じディレクトリに移動し、.java ファイルは残りのクラスと一緒に src ディレクトリに配置する必要があります。

それでは、いくつかのコードをチェックしてみましょう..

まず、ファイルからすべてのテクスチャをロードする必要があります。次のコードを使用して実行します。

これらは、アニメーション化可能なオブジェクトを作成するために使用する変数です。

private TexturePack dustTexturePack;
private TexturePackTextureRegionLibrary dustTexturePackLibrary;
public TiledTextureRegion dust;

次のコードは、実際に単一のテクスチャをビットマップから変数にロードします。

try {
        dustTexturePack = new TexturePackLoader(activity.getTextureManager(),"gfx/Animations/Dust Animation/").loadFromAsset(activity.getAssets(),"dust_anim.xml");

        dustTexturePack.loadTexture();
        dustTexturePackLibrary = dustTexturePack.getTexturePackTextureRegionLibrary();

} catch (TexturePackParseException e) {
    Debug.e(e);
}
TexturePackerTextureRegion[] obj = new TexturePackerTextureRegion[dustTexturePackLibrary.getIDMapping().size()];

for (int i = 0; i < dustTexturePackLibrary.getIDMapping().size(); i++) {
    obj[i] = dustTexturePackLibrary.get(i);
}

dust = new TiledTextureRegion(dustTexturePack.getTexture(), obj);

ご覧のとおり、TiledTextureRegion オブジェクトを使用しています。これまでに行ったことは、実際にテクスチャをロードし、TiledTextureRegion オブジェクトに、大きなビットマップにある小さな画像の領域について必要なすべての情報を与えることです。

後で、これをゲームの任意の部分で使用するには、次のようにします。

AnimatedSprite dustAnimTiledSprite = new AnimatedSprite(500, 125, resourcesManager.dust, vbom);
myScene.attachChild(dustAnimTiledSprite);

最後に、特定の時間にオブジェクトをアニメーション化するには、単純なメソッド animate を次のように使用します。

dustAnimTiledSprite.animate(40, 0);

(この場合、各フレームの持続時間は 40 で、ループは 0 です - 1 回アニメーション化されます)

** AnimatedSprite と TiledSprite の違いはよくわかりません。しかし、これが私のゲームで簡単なアニメーションを表示する方法です。

これがあなたが探していたものであることを願っています。幸運を

于 2013-10-25T09:08:25.867 に答える
0

これは8フレームのスプライトシートです

Player.sprite.animate(
                                            new long[] { 100, 100 }, 7, 8,
                                            false, new IAnimationListener() {

                                                public void onAnimationStarted(
                                                        AnimatedSprite pAnimatedSprite,
                                                        int pInitialLoopCount) {

                                                }

                                                public void onAnimationLoopFinished(
                                                        AnimatedSprite pAnimatedSprite,
                                                        int pRemainingLoopCount,
                                                        int pInitialLoopCount) {

                                                }

                                                public void onAnimationFrameChanged(
                                                        AnimatedSprite pAnimatedSprite,
                                                        int pOldFrameIndex,
                                                        int pNewFrameIndex) {

                                                }

                                                public void onAnimationFinished(
                                                        AnimatedSprite pAnimatedSprite) {
                                                    Player.sprite.animate(
                                                            new long[] { 100,
                                                                    100, 100,
                                                                    100, 100,
                                                                    100, 100 },
                                                            0, 6, true);

                                                }
                                            });
于 2013-11-30T05:53:27.923 に答える