0

android devを初めて使用し、andengineとiveを使用すると、1つ以上のスプライトシートをカバーする大きなアニメーションを処理するときに問題が発生します。基本的に、アニメーションが2つのスプライトシートにまたがる大きなスプライトがあります。それらを正常にロードする方法を見つけようとしています。私が試みていることをお見せします。うまくいけば、誰かが私に正しい方法を示すか、私がそれを私の方法で終えるのを手伝ってくれるでしょう。

まず、xmlファイルから2つのテクスチャパックを作成します。これらはうまく作成されます

TexturePackTextureRegionLibrary packer1 = null,packer2 = null;
        TexturePack spritesheetTexturePack1 = null,spritesheetTexturePack2 = null;
        try {
            spritesheetTexturePack1 = new TexturePackLoader(activity.getTextureManager(), "Animation/Jack/")
                    .loadFromAsset(activity.getAssets(), "Jack_walk1" + ".xml");
            spritesheetTexturePack1.loadTexture();
            packer1 = spritesheetTexturePack1.getTexturePackTextureRegionLibrary();
        } catch (final TexturePackParseException e) {
            Debug.e(e);
        }

        TexturePackerTextureRegion textureRegion = packer1.get(Jack_walk1.LOOP_JACK_WALK_TO_SAFE_AREA_00000_ID);

        try {
            spritesheetTexturePack2 = new TexturePackLoader(activity.getTextureManager(), "Animation/Jack/")
                    .loadFromAsset(activity.getAssets(), "Jack_walk2" + ".xml");
            spritesheetTexturePack2.loadTexture();
            packer2 = spritesheetTexturePack2.getTexturePackTextureRegionLibrary();
        } catch (final TexturePackParseException e) {
            Debug.e(e);
        }

        TexturePackerTextureRegion textureRegion2 = packer2.get(Jack_walk1.LOOP_JACK_WALK_TO_SAFE_AREA_00000_ID);


        ArrayList<SparseArray> animList = new ArrayList<SparseArray>();
        animList.add(packer1.getIDMapping());
        animList.add(packer2.getIDMapping());
        TiledTextureRegion text1 = TiledTextureRegion.create(textureRegion.getTexture(), (int) textureRegion.getTextureX(),  (int) textureRegion.getTextureY(), animList);

次に、この関数をtiledtextureregionに追加して、フレーム情報を保持する配列のリストを取得し、それらをitexturregion配列に追加する手順を実行しました。

public static TiledTextureRegion create(final ITexture pTexture, final int pTextureX, final int pTextureY, final ArrayList<SparseArray> animList) {
        ITextureRegion[] textureRegions = null;
        int maxFrame = 0;

        for(int i = 0; i < animList.size(); i++){
            maxFrame += animList.get(i).size();
        }
        int currentFrame = 0;
        textureRegions = new ITextureRegion[maxFrame];
        for(int i = 0 ; i < animList.size(); i++){
            SparseArray<? extends ITexturePackTextureRegion> packer = animList.get(i);
            for(int j = 0; j < packer.size(); j++) {
                if (packer.valueAt(j)!= null){

                    final int x = (int) packer.valueAt(j).getTextureX();
                    final int y = (int) packer.valueAt(j).getTextureY();
                    final int width = packer.valueAt(j).getSourceWidth();
                    final int height = packer.valueAt(j).getSourceHeight();
                    final Boolean rotated = packer.valueAt(j).isRotated();


                    textureRegions[currentFrame] = new TextureRegion(pTexture, x, y, width, height, rotated);

                    currentFrame++;
                }
            }
        }


        return new TiledTextureRegion(pTexture, false, textureRegions);
    }

ただし、行はnew TiledTextureRegion(pTexture、false、textureRegions);を返します。タイル領域を作成するときに、1つのテクスチャがフレームを取得することを期待しています。私がここから行くべきアイデア、または私が見過ごしたこれを処理するための非常に簡単な方法はありますか?助けてくれてありがとう

4

1 に答える 1

0

このクラスは、単一のテクスチャで動作するように設計されています。

テクスチャを 1 つにマージできない場合 (これが当てはまると思います)、2 つ以上の TiledTextureRegion オブジェクトを含み、これらのいずれかを自由に選択するメソッドを持つ ITextureRegion を実装する新しいクラスを作成することができます。 . ITextureRegion の残りのメソッドを選択したオブジェクトに委譲するだけです。

public class MultipleTextureRegion implements ITextureRegion {
  private List<TiledTextureRegion> internal;
  private int selected=0;

  //...

  public void add(TiledTextureRegion region) {
    internal.add(region);
  }

  public void select(int index) {
    selected=index;
  }

  //...

  // Delegates all ITextureRegion methods ...

  public int getWidth() { return internal.get(selected).getWidth(); }
  // And so on...
  }
于 2012-08-27T09:31:57.313 に答える