Использование нескольких листов спрайтов для одного и того же объекта AndEnginge

У меня есть несколько листов спрайтов для моего объекта (Parrot), таких как еда, перемещение слева направо, справа налево и многое другое. Я использую AndEngine Gles2.0. Как мне это реализовать? каждый раз, когда мне нужно использовать другой лист спрайта, отсоединить предыдущий и в том же месте добавить новый. Это будет беспокойно!

Кто-нибудь здесь, кто уже реализовал этот сценарий? Если я использую один лист спрайта для каждой анимации, его размер будет увеличиваться, и это приведет к исключению нехватки памяти!

1 ответ

Решение

Это мой код для выполнения анимации различных листов спрайтов.

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.

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, которые я не хочу ни в коем случае

Другие вопросы по тегам