1

食べる、左から右へ、右から左へ移動するなど、オブジェクト(オウム)用に複数のスプライトシートがあります。AndEnginegles2.0を使用しています。どのように実装すればよいですか?別のスプライトシートを使用する必要があるたびに、前のスプライトシートを取り外し、同じ場所に新しいスプライトシートを追加します。これは多忙になるでしょう!

この種のシナリオをすでに実装している人はいますか?アニメーションごとに1つのスプライトシートを使用すると、サイズが大きくなり、メモリ不足の例外がスローされます。

4

1 に答える 1

2

これは、さまざまなスプライトシートのアニメーションを実行するための私のコードです。

public void performEatingAnimation(Bird b) {
    float x = b.getSelectedAnimatedsprite().getX();
    float y = b.getSelectedAnimatedsprite().getY();
    b.getSelectedAnimatedsprite().setVisible(false);

    b.getSelectedAnimatedsprite().detachSelf();
    b.setSelectedAnimatedsprite(b.getEatingAnimatedsprite());

    attachObjectWithNewPosition(b.getSelectedAnimatedsprite(), x, y);
    b.getSelectedAnimatedsprite().animate(60, 2);

}

public void performWalkAnimation(Bird b) {
    float x = b.getSelectedAnimatedsprite().getX();
    float y = b.getSelectedAnimatedsprite().getY();
    b.getSelectedAnimatedsprite().setVisible(false);

    b.getSelectedAnimatedsprite().detachSelf();
    b.setSelectedAnimatedsprite(b.getWalkingAnimatedsprite());

    attachObjectWithNewPosition(b.getSelectedAnimatedsprite(), x, y);
    b.getSelectedAnimatedsprite().animate(60, 0)
 }

そして、これがAnimatedSpriteのdeepCopyを実行するための私のsetSelectedメソッドです。

public void setSelectedAnimatedsprite(AnimatedSprite selectedAnimatedsprite) {
    AnimatedSprite sprite = new AnimatedSprite(
            selectedAnimatedsprite.getX(), selectedAnimatedsprite.getY(),
            selectedAnimatedsprite.getTiledTextureRegion().deepCopy(),
            selectedAnimatedsprite.getVertexBufferObjectManager());

    this.selectedAnimatedsprite = sprite;
}

選択したスプライトをdeepCopyする必要があります。そうしないと、参照とsetVisible(false)が渡され、WalkingAnimatedSpriteとEatingAnimatedSpriteでデタッチが発生します。

于 2012-08-07T05:13:36.277 に答える