gpt4 book ai didi

Java 游戏 - 如何使用 Arraylist 添加敌人?

转载 作者:行者123 更新时间:2023-12-01 14:04:20 25 4
gpt4 key购买 nike

我正在使用 GdxLib 做我的第一个 Java 游戏,我想使用 ArrayList 创建敌人(但我不确定如何做到这一点),并且所有敌人都会在随机位置生成,但我遇到了一些问题,

  1. 我创建它们是错误的,因为它们像“线”一样生成,因为我不知道如何随机生成它们。
  2. 当我在屏幕上创建的任何敌人“死亡”(计数 == 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) 放入下一个创建,但是当我运行游戏时,屏幕卡住,但线程正在工作,因为我使用了每次创建后在控制台中打印的 System.out.println 。还有另一种选择可以在不使用 Thread.sleep 的情况下延迟 bucle?

最佳答案

首先,这个方便的小功能应该可以帮助您:

public float randFloat(float Min, float Max) {
return Min + (float)(Math.random() * (Max - Min + 1));
}

然后你可以这样做:

for (int i = 0; i < 5; i++) {
float x = randFloat(-50.0, 50.0);
float y = randFloat(-50.0, 50.0);
enemies.add(new Follower(5f, 0, 1, 1, new Vector2(x, y)));
}

您的xy变量不应该是全局的,而应该是您创建敌人的本地变量。此外,您在声明时不需要指定 enemies 列表的大小。在上面的代码示例中,我只是将 -50.050.0 作为 xy 的最小值/最大值,现实中你应该超越你的关卡/世界的界限。

When any of my created enemies on Screen 'dies' (count == 20) if i shoot any other enemy i can't kill it.

我假设 count 指的是敌人的生命值,因为你需要 20 次射击才能杀死敌人。在这种情况下,您当然无法杀死另一个敌人,因为您从未重置 count 变量!你不断地增加它,但它还会再次变成 20 吗?改为这样做:

if (count == 20) {
count = 0;
eIter.remove();
}

希望能解决您的问题。

关于Java 游戏 - 如何使用 Arraylist 添加敌人?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19043675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com