Я создал этот пул для переработки и повторного использования спрайтов, которые я добавляю в свою сцену.
Как вы увидите в моем коде, я создал свой собственный метод получения, который рандомизирует спрайт, выбранный для появления на сцене, и рандомизирует его положение по оси 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
// ===========================================================
}
Что-нибудь, что я могу сделать или изменить, чтобы улучшить логику этого?
РЕДАКТИРОВАТЬ:
Вот что мне удалось придумать до сих пор, теперь я застрял в том, как вытащить предмет, а затем переработать его для повторного использования.
спрайты открытого класса расширяют 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();
Как перерабатывать предметы? Я делаю это правильно?