【问题标题】:Need enemyManager to wait between spawning enemies需要enemyManager 在生成的敌人之间等待
【发布时间】:2014-10-08 21:07:48
【问题描述】:

我有几个不同的敌人类型和每个类型的enemyManager arrayList 类。我让每种类型的敌人在稍微偏离屏幕的生成点随机生成,然后出现在屏幕上,然后离开另一边,死亡并随机响应。问题是当我使用循环来生成对象时,其中许多对象会在同一个地方生成或相互赶上,同时死亡并再次生成。我想在他们之间有一个延迟,以便他们更加分散。

我正在寻找的是一种在 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 并在构造函数中调用该任务,但这也不起作用。不知道为什么。

【问题讨论】:

  • “但这不起作用”告诉我们很少。事实上,我很难弄清楚是什么导致了你目前的问题。请提供更多背景、细节和相关代码。您使用的是什么 GUI 库?如果是 Swing,则使用 Swing 计时器来延迟。如果不是,那么可能是 java.util.Timer 或预定的执行程序服务。是的,现在可能是您阅读线程的时候了。
  • 我尝试了 Thread.sleep 但它不起作用,它暂停了我的整个程序,而不仅仅是在敌人管理器中生成。我正在使用swing和awt。我添加的大部分内容都是在各种教程中找到的。这是我第一次在 java 中构建 gui。我正在使用摇摆计时器重新粉刷所有东西。我不确定我是否可以使用另一个来生成敌人?我将在下面发布我如何尝试实现 TimerTask 并解释它做了什么以及为什么它不起作用。谢谢你们。

标签: java timed spawning


【解决方案1】:

TimerTask 和 java.util.Timer 不起作用,因为它没有设置为在 Swing 事件线程上运行重复代码,应该避免使用 Swing GUI。您应该再次使用 Swing Timer,因为在 Timer 的 ActionListener 中调用的所有代码都是在 Swing 事件线程上调用的。

另一方面,如果你有一个长时间运行的任务,比如你想做图像分析或其他需要很长时间运行的事情,那么应该在后台线程中调用,比如通过 SwingWorker .

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 2013-03-10
    • 2017-10-04
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    相关资源
    最近更新 更多