Я хочу знать, как работает Sprite Pool, так как я их не понимаю. То, что я пытаюсь сделать, это показать случайные спрайты каждый раз, когда пользователь прикасается к кнопке (я уже управляю элементом управления), но мой код кажется неправильным, потому что он снова показывает один и тот же спрайт снова и снова.Случайный спрайт с пулом Sprite
Это мой код:
public class SpritePool extends GenericPool<Sprite> {
private ITextureRegion mTexture1, mTexture2, mTexture3, mTexture4, mTexture5;
private VertexBufferObjectManager mVertexBufferObjectManager;
private Sprite sprite = null;
public SpritePool(ITextureRegion pTextureRegion1, ITextureRegion pTextureRegion2, ITextureRegion pTextureRegion3
, ITextureRegion pTextureRegion4, ITextureRegion pTextureRegion5, VertexBufferObjectManager pVerTexBufferObjectManager){
this.mTexture1 = pTextureRegion1;
this.mTexture2 = pTextureRegion2;
this.mTexture3 = pTextureRegion3;
this.mTexture4 = pTextureRegion4;
this.mTexture5 = pTextureRegion5;
this.mVertexBufferObjectManager = pVerTexBufferObjectManager;
}
@Override
protected Sprite onAllocatePoolItem() {
YesOrNoActivity.setRoll_1(MathUtils.RANDOM.nextInt(5) + 1);
switch(YesOrNoActivity.getRoll_1()){
case 1:
sprite = new Sprite(0, 0, this.mTexture1, this.mVertexBufferObjectManager);
break;
case 2:
sprite = new Sprite(0, 0, this.mTexture2, this.mVertexBufferObjectManager);
break;
case 3:
sprite = new Sprite(0, 0, this.mTexture3, this.mVertexBufferObjectManager);
break;
case 4:
sprite = new Sprite(0, 0, this.mTexture4, this.mVertexBufferObjectManager);
break;
case 5:
sprite = new Sprite(0, 0, this.mTexture5, this.mVertexBufferObjectManager);
break;
}
return sprite;
}
public synchronized Sprite obtainPoolItem(final float pX, final float pY) {
Sprite sprite = super.obtainPoolItem();
sprite.setPosition(pX, pY);
sprite.setVisible(true);
sprite.setIgnoreUpdate(false);
sprite.setColor(1,1,1);
return sprite;
}
@Override
protected void onHandleRecycleItem(Sprite pItem) {
super.onHandleRecycleItem(pItem);
pItem.setVisible(false);
pItem.setIgnoreUpdate(true);
pItem.clearEntityModifiers();
pItem.clearUpdateHandlers();
}
}
Надеется, что вы, ребята, можете помочь мне, спасибо :)
Вау, это действительно помогает. Тогда мне действительно не нужен пул, так как у меня нет одинаковых спрайтов для загрузки. Но как удалить спрайт и загрузить новый, удалить снова и загрузить и т. Д., Не влияя на производительность? спасибо :) отредактирован: спрайты случайным образом сгенерированы, поэтому он не будет тем же спрайтом –
«без влияния на производительность» хмм. Загрузка и удаление спрайтов влияет на производительность. На этом пути нет 100%.С яркой стороны небольшие спрайты не должны сильно влиять на производительность. –
Хмм, я думаю, я буду искать обходной путь. Благодаря! –