我正在使用GdxLib进行我的第一个Java游戏,我想使用ArrayList创建敌人(但我不知道该怎么做),并且所有这些都是随机产生的,但是我问题很少,
这是类代码:
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?
答案 0 :(得分:1)
首先,这个小功能应该可以帮到你:
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)));
}
您的x
和y
变量不应该是全局变量,而应该是创建敌人的本地变量。声明它时,您也不需要指定enemies
列表的大小。在上面的代码示例中,我只给了-50.0
和50.0
作为x
和y
的最小/最大值,实际上你应该传递你的关卡/世界的范围。 / p>
当我在屏幕上创建的任何敌人“死亡”时(数= = 20)如果我射击任何其他敌人我无法杀死它。
我假设count
指的是敌人的健康状况,因为你需要20次射击才能杀死敌人。在这种情况下,当然你不能杀死另一个敌人,因为你永远不会重置count
变量!你继续增加它,但它会再次增加20吗?这样做:
if (count == 20) {
count = 0;
eIter.remove();
}
我希望能解决你的问题。