1

我的对象(鹦鹉)有多个精灵表,比如吃东西、从左到右、从右到左等等。我正在使用 AndEngine gles2.0。我应该如何实施?每次我必须使用不同的精灵表时,分离前一个并在同一位置添加新的。这将是忙碌的!

这里有人已经实现了这种场景吗?如果我为每个动画使用单个精灵表,它的大小会增加,并且会抛出内存不足的异常!

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)
 }

这是我的 setSelected 方法来执行 AnimatedSprite 的 deepCopy。

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

    this.selectedAnimatedsprite = sprite;
}

我必须对选定的精灵进行深度复制,因为如果我不这样做,它将传递引用和 setVisible(false) 并且分离将发生在 WalkingAnimatedSprite 和 EatingAnimatedSprite 上,我无论如何都不想要

于 2012-08-07T05:13:36.277 回答