Я создал этот пул для переработки и повторного использования спрайтов, которые я добавляю в свою сцену
Как вы увидите в моем коде, я создал свой собственный метод получения, который рандомизирует выбранный спрайт для отображения на сцене и рандомизирует его положение x. Проблема в том, что кажется, что он выбирает одну и ту же позицию по какой-то причине, он выбирает среднюю, левую и правую по какой-то причине в течение всей сцены, когда предполагается случайное расположение позиций, каждый раз, когда я перезапускаю сцену, он выбирает случайно 3 позиции для 3 спрайтов и остаются неизменными на протяжении всей сцены, спрайты также не рандомизированы. Вот что я работаю с
private ITextureRegion texture1;
private ITextureRegion texture2;
private ITextureRegion texture3;
private ITextureRegion texture4;
private ITextureRegion texture5;
private Scene mScene;
private Context mContext;
private Camera mCamera;
private LinkedList<Sprite>pool1;
// ===========================================================
// Constructors
// ===========================================================
public FruitPool(final ITextureRegion pFruitTextureRegion,
ITextureRegion pFruitTextureRegion2,ITextureRegion pFruitTextureRegion3, ITextureRegion pFruitTextureRegion4, ITextureRegion pFruitTextureRegion5,Scene mScene2, Camera camera, LinkedList<Sprite>items) {
this.texture1 = pFruitTextureRegion;
this.texture2 =pFruitTextureRegion2;
this.texture3 = pFruitTextureRegion3;
this.texture4 = pFruitTextureRegion4;
this.texture5 = pFruitTextureRegion5;
this.mScene = mScene2;
this.pool1 = items;
this.mCamera = camera;
}
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
protected Sprite onAllocatePoolItem() {
Random rand = new Random();
Random randFruit = new Random();
Sprite fruit = null;
float x = rand.nextInt((int) mCamera.getWidth() - texture3.getHeight());
int textureNumber = randFruit.nextInt(5)+1;
switch(textureNumber){
case 1:
fruit = new Sprite(x, 0, this.texture1);
break;
case 2:
fruit = new Sprite(x, 0, this.texture2);
break;
case 3:
fruit = new Sprite(x, 0, this.texture3);
break;
case 4:
fruit = new Sprite(x, 0, this.texture4);
break;
case 5:
fruit = new Sprite(x, 0, this.texture5);
break;
}
mScene.attachChild(fruit);
return fruit;
}
@Override
protected void onHandleObtainItem(final Sprite pItem) {
pItem.reset();
}
@Override
protected void onHandleRecycleItem(final Sprite pItem) {
pItem.setVisible(false);
pItem.setIgnoreUpdate(true);
}
// ===========================================================
// Methods
// ===========================================================
// ===========================================================
// Inner and Anonymous Classes
// ===========================================================
}
Что-нибудь, что я могу сделать или изменить, чтобы сделать логику этого лучше?
EDIT:
Вот то, что мне удалось до сих пор придумать, теперь я застрял на том, как вытащить предмет и затем переработать его для возобновления
открытый класс спрайтов расширяет TObjectPool {
private CustomArrayList<Sprite> sprites;
private ITextureRegion texture1;
private ITextureRegion texture2;
private ITextureRegion texture3;
private ITextureRegion texture4;
private ITextureRegion texture5;
public sprites(int poolsize) {
super(poolsize);
sprites = new CustomArrayList<Sprite>(poolsize);
// TODO Auto-generated constructor stub
}
public void FruitPool(final ITextureRegion watermelonRegion,
ITextureRegion cherryRegion,ITextureRegion mBallTextureRegion, ITextureRegion grapeTextureRegion, ITextureRegion strawberryTextureRegion) {
texture1 = watermelonRegion;
texture2 = cherryRegion;
texture3 = mBallTextureRegion;
texture4 = grapeTextureRegion;
texture5 = strawberryTextureRegion;
}
@Override
public void fillPool() {
Sprite fruit1 = new Sprite(0, 0, this.texture1);
sprites.add(fruit1);
Sprite fruit2 = new Sprite(0, 0, this.texture2);
sprites.add(fruit2);
Sprite fruit3 = new Sprite(0, 0, this.texture3);
sprites.add(fruit3);
Sprite fruit4 = new Sprite(0, 0, this.texture4);
sprites.add(fruit4);
Sprite fruit5 = new Sprite(0, 0, this.texture5);
sprites.add(fruit5);
super.getAvailable().add(fruit1);
super.getAvailable().add(fruit2);
super.getAvailable().add(fruit3);
super.getAvailable().add(fruit4);
super.getAvailable().add(fruit5);
}
}
Я вытаскиваю предмет вот так ..
sprites spritesClass = sprites(5);
Sprite item = spritesClass.allocate();
Как перерабатывать предметы? Я делаю это правильно?