私は私が表示されるように選択されているものをスプライトランダム私自身の入手方法を作成し、あなたが私のコードで表示されるように私は私のシーンにGenericPool論理的問題(AndEngine)
を追加し、リサイクルやリユーススプライトにこのプールを作成しましたそのシーンの位置をランダム化します。問題は何らかの理由で同じポジションを選んだようで、シーン全体を何らかの理由で中央、左、右に選んでいます。ポジションをランダム化すると仮定したとき、ランダムに選択したシーンを再起動するたびに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:
ここIVEが
パブリッククラススプライトをresuedされるように私はアイテムを引っ張るんか今のところ、今で立ち往生イムを思い付くし、それをリサイクルするために管理するものであるが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();
アイテムをリサイクルするにはどうすればよいですか?私はこれを正しくやっていますか?
私はthis.fruitsPool.obtainPoolItem()を呼び出します。ちょうど約毎秒 –
@coder:メソッドが呼び出されるたびに新しいオブジェクトを作成するので、それはオブジェクトプールではありません。 – Wroclai
それは本当です!プールに入っていれば自動的にスプライトを再利用すると思っていました。私はそれを.obtainPoolItem()から.onAllocatePoolItem()に変更したときに問題を修正しましたが、あなたのプロジェクトをチェックアウトして、それを利用できるかどうかを確認しようとしています。 –