public class Player {
private Sprite enemy;
public Rectangle bounds;
private SpriteBatch batch;
private float deltaTime;
private float timer;
private ArrayList<Sprite> enemies;
private Iterator<Sprite> enemyIterator;
private ArrayList<Vector2> posCoordinate;
Sprite newEnemy;
public void create(){
batch=new SpriteBatch();
timer=0;
enemy=new Sprite(new Texture(Gdx.files.internal("spr_player.png")));
bounds=new Rectangle(200,700,82,80);
enemies=new ArrayList<Sprite>();
posCoordinate=new ArrayList<Vector2>();
newEnemy=Pools.obtain(Sprite.class);
}
public void update(){
deltaTime=Gdx.graphics.getDeltaTime();
enemyIterator=enemies.iterator();
timer+=1*deltaTime;
if(timer>=1f){
newEnemy(); //method called every second
timer-=1;
}
}
public void newEnemy(){
Vector2 position=Pools.obtain(Vector2.class); //vector2 is created for each enemy every second.
position.set(200,700);
posCoordinate.add(position);
newEnemy=Pools.obtain(Sprite.class); //enemy created every second
newEnemy.set(enemy);
enemies.add(newEnemy);
}
public void draw(SpriteBatch batch){
//this is where the enemy position is set and movement
for(Sprite enemy:enemies){
enemy.draw(batch);
}for(Vector2 position:posCoordinate){
newEnemy.setPosition(position.x,position.y);
position.y-=2;
}
}
}
newEnemy()
方法後,臨時精靈運動被稱爲每一秒,這就是爲什麼新的精靈所呈現的每一秒。libgdx正在催生
基本上我想要做的是,當一個新的敵人產生時,它必須向下移動,直到它離開屏幕。但是發生的事情是敵人只會移動一秒鐘。
我是新手,當我移除Sprite並將它們放回池中時,如何再次使用池中的Sprite?這是幹什麼的// Sprite newEnemy = Pools.obtain(Sprite.class); –
Pools.obtain(Sprite.class);將一個精靈拉出游泳池供您使用。如果該池爲空,它會自動實例化一個新的Sprite併爲您提供。你不知道你得到的精靈是新的還是回收的,所以一定要立刻設置它的紋理區域和位置。 – Tenfour04
所以你不需要編寫額外的代碼,它會自動回收精靈?感謝您的回答,您的幫助非常大。 –