Я использую AndEngine для создания игры.AndEngine's GenericPool Handling 6 Sprites
Я случайно добавил спрайты в свой код, которые появляются примерно каждую секунду.
Мне сообщили, что использование Generic Pool позволит сохранить сбор мусора в моем случае, в результате чего моя игра будет отставать в определенное время.
Итак, вот что ив удалось придумать для моего GenericPool ..
public class FruitPool extends GenericPool<Sprite> {
private Sprite msprite;
public FruitPool(Sprite sprite) {
if (sprite == null) {
// Need to be able to create a Sprite so the Pool needs to have a TextureRegion
throw new IllegalArgumentException("The texture region must not be NULL");
}
msprite = sprite;
}
/**
* Called when a Bullet is required but there isn't one in the pool
*/
@Override
protected Sprite onAllocatePoolItem() {
return msprite;
}
/**
* Called when a Bullet is sent to the pool
*/
@Override
protected void onHandleRecycleItem(final Sprite sprite) {
msprite = sprite;
msprite.setIgnoreUpdate(true);
msprite.setVisible(false);
}
/**
* Called just before a Bullet is returned to the caller, this is where you write your initialize code
* i.e. set location, rotation, etc.
*/
@Override
protected void onHandleObtainItem(final Sprite fruit) {
fruit.reset();
}
}
Итак, как вы, ребята, видите ив создали пул, который я могу добавить спрайт.
Проблема в том, что у меня есть метод, который случайным образом выбирает число между 1 и 6. И я использую статут Switch, чтобы выбрать, какой спрайт будет добавлен в сцену.
Как я мог сделать это с помощью GenericPool? Имея в своем распоряжении шесть разных спрайтов и возможность выбрать, какой из них добавлен в сцену?
Я думал, может быть, я мог бы создать метод, который добавит каждый спрайт в бассейн в моей игре, а затем я застрял в той части, где я нахожу способ выбрать, какой спрайт выбран из пула, например обеспечивая int, который требуется, чтобы выбрать спрайт.
Спасибо за помощь в Advance, ребята!
Wow, Thanks alot Jong! Теперь я понимаю это намного лучше! SO в основном я поставляю область текстуры в пул, и я могу использовать poolItem.obtainItem(), например, чтобы получить мои первые плоды. Мне просто нужно создать 6 разных пулов для каждого из них. Теперь, как это работает, если один из них выходит из экрана?Как работает рециркуляция? И снова использовать тот же спрайт? –
Когда вы закончите с спрайтом (например, выключается экран), вы называете его методом пула 'recyclePoolItem'. Теперь пул держит этот спрайт, и в следующий раз, когда вы вызовете 'getPoolItem', он вернет его, а не выделит новый (и это цель пула). – Jong
Спасибо, много Jong. Ты помог много! Благодаря!! –