所以我想实现一个计时器,它允许我每15秒画一个红色正方形,然后在那里5秒后使正方形从画布上消失。这是我想要实现的游戏陷阱,但我不确定计时器是如何工作的。
我想我需要2个定时器用于出现,第二个用于消失(?)但不确定如何同步它们以便方块出现并在15秒内停留在画布的位置5秒无论是。 (以随机的15-20秒的时间增加它甚至可能更好)。将画布从红色变为白色后,此项目消失非常重要。
如何在函数中调用计时器?我需要一个新课吗?实例变量是否足够?
答案 0 :(得分:2)
我们缺少一些重要的细节(比如你正在使用哪个框架),但基本的想法是......
List
个“事件”,设计为在给定时间点触发,让“主循环”检查这些事件(可能按时间顺序排序,以便更有效地迭代并根据事件的当前时间和时间触发需要触发的事件(这显然会从List
中删除事件)事件可能会创建新事件,例如,当您的陷阱门事件被触发时,它可能会在将来触发“删除”事件5秒。同样,当触发移除事件时,如果可能触发新的“陷阱门”事件
这样,您可以随机出现任意数量的活板门。
请记住,更多线程/计时器并不等同于更好的性能,也会增加问题的整体复杂性,因为您需要进行一系列检查以确保所有内容保持同步
答案 1 :(得分:1)
作为一个java图形应用程序,我只需创建SwingWorker实例并在需要时触发它。每个SwingWorker都会以适当的睡眠调用(https://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html)开始。看看Swing文档,以便创建在后台运行的正确SwingWorkers,等待并稍后执行您需要的任务(https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html)。
答案 2 :(得分:0)
您可以创建一个新线程,使所有计时器都能正常工作。
但是这个部分进入了需要计时器的地方:
new Thread(new Runnable()) {
@override
public void run() {
while(true) {
// do the drawing stuff
try {
sleep(5000); // make the thread wait 5000 microsecs = 5s
} catch (InterruptedException ex) {}
// do deleting stuff
try {
sleep(15000);
} catch (InterruptedException ex) {}
}
这会重复启动一个新线程进行创建,等待,删除和等待过程。