2014-10-08 52 views
1

我有几种不同的敌人类型和每种类型的enemyManager arrayList类。我将每种类型的敌人随机产卵,稍微离开屏幕,进入屏幕,然后离开另一边,死亡,随机响应。问题是当我使用一个循环来产生物体时,许多物体会在同一个地方产卵,或者在同一时间追上另一个物体并再次产卵。我希望在他们之间有一段时间的延迟,这样他们就更加分散了。需要enemyManager在产卵的敌人之间等待

我在寻找的是一种减缓java中敌人产卵的方法。我尝试通过计时器扩展敌方管理员类并命名spawn函数运行,但这不起作用。

另外我不是多线程,因为我真的不知道如何设置它,并试图完成这个项目而没有实现,但如果这似乎是最好的解决方案,那么我想我将不得不这样做。

感谢您的任何建议。

更新.....

class spawnLgCars extends TimerTask { 
    public void run() { 
     if (lgCars.size() < 10) { 
      lgCars.add(new LgCar()); 
      System.out.println("spawned"); 
     } else if (lgCars.size() > 10) { 
      lgCars.get(0); 
     } 
    } 

} 

我在这里,我想如何实现TimerTask的,而是因为它必须是在它自己的类,它没有进入实例的属性我正在使用的lgCars。然后我尝试通过Timer Task添加扩展lgCars,并在构造函数中调用任务,但这也不起作用。不知道为什么。

+0

'Thread.sleep'? – 2014-10-08 21:15:39

+0

“但这不起作用”告诉我们一点。事实上,我很难找出导致你目前问题的原因。请提供更多背景,细节和相关代码。你使用的是什么GUI库?如果摇摆,然后使用摇摆计时器来延迟。如果没有,那么可能是一个java.util.Timer或调度执行器服务。是的,现在您可能需要阅读线程了。 – 2014-10-08 21:33:31

+0

我尝试了Thread.sleep,但它没有奏效,它暂停了我的整个程序,而不仅仅是敌方经理的产卵。我正在使用swing和awt。我添加的大部分内容都是在各种教程中找到的。这是我第一次在java中构建一个gui。我正在使用摆动计时器重新绘制所有内容。我不确定我是否可以使用另一个来产生敌人?我会发布我如何试图实现下面的TimerTask,并解释它做了什么以及为什么它不起作用。谢谢你们。 – 2014-10-08 22:04:36

回答

0

TimerTask和java.util.Timer不起作用,因为它没有设置为在Swing事件线程上运行重复代码,应该使用Swing GUI来避免。同样,您应该使用Swing Timer,因为在Swing事件线程中调用了Timer的ActionListener中调用的所有代码。另一方面,如果你有一个长时间运行的任务,比如你想要做图像分析或其他需要很长时间运行的东西,那么应该在后台线程中调用它,例如通过SwingWorker的。