我正在使用 GdxLib 做我的第一个 Java 游戏,我想使用 ArrayList 创建敌人(但我不知道该怎么做),并且它们都在随机位置产生,但我遇到的问题很少,
- 我创建它们是错误的,因为它们像“线”一样生成,因为我不知道如何随机生成它们。
- 当我在屏幕上创建的任何敌人“死亡”(计数 == 20)时,如果我射击任何其他敌人,我就无法杀死它。
这是课程代码:
public class World {
gameMain game;
Ship ship;
ArrayList<Bullet> bullets = new ArrayList<Bullet>();
ArrayList<Follower> enemies = new ArrayList<Follower>(5);
WorldRenderer wr;
Iterator<Bullet> bIter;
Iterator<Follower> eIter;
Bullet b;
Enemy e;
int count = 0;
int shipCount = 0;
float x = 0;
float y = 0;
public World (gameMain game){
this.game = game;
ship = new Ship(new Vector2(20, 15), 1, 1, 0, 5f);//Ship Atributes
for (int i= 0;i<5; i++){ //Creates 5 enemies
enemies.add(new Follower(5f, 0, 1, 1, new Vector2(x,y)));
x = x+2;
y = y+2;
}
Gdx.input.setInputProcessor(new InputHandler(this));
}
public Ship getShip(){
return ship;
}
public ArrayList<Follower> getEnemies(){
return enemies;
}
public void update(){
ship.update();
bIter = bullets.iterator();
while(bIter.hasNext()){
b = bIter.next();
b.update(ship);
}
eIter = enemies.iterator();
while(eIter.hasNext()){
e = eIter.next();
if(ship.getBounds().overlaps(e.getBounds()))
Gdx.app.log(gameMain.LOG, "ColisioN!");
shipCount = shipCount +1;
}
bIter = bullets.iterator();
while(bIter.hasNext()){
b = bIter.next();
eIter = enemies.iterator();
while(eIter.hasNext()){
e = eIter.next();
if(e.getBounds().overlaps(b.getBounds())){
Gdx.app.log(gameMain.LOG, "!");
bIter.remove();
count = count +1;
if (count == 20) {
eIter.remove();
}
}
}
}
}
public void addBullet(Bullet b){
bullets.add(b);
}
public ArrayList<Bullet> getBullets(){
return bullets;
}
public void setRenderer(WorldRenderer wr){
this.wr = wr;
}
public WorldRenderer getRenderer(){
return wr;
}
public void dispose(){
}
}
另外,我尝试Thread.sleep(2000)
在创建敌人之后将 a 放到下一个创建中,但是当我运行游戏时,屏幕会冻结,但是线程正在工作,因为我System.out.println
在每次创建后都使用 a 在控制台中打印。还有另一种选择来延迟 bucle 而不使用Thread.sleep
?