我正在尝试使用一些字符串来介绍游戏,我想让其他人等待另一个字符串弹出,我不直接想要使用Thread.sleep()让它等待,因为我是不确定这是否是最好的选择。有没有其他方法可以让某些东西等待而不是让线程休眠,或者我只是让线程睡眠?
答案 0 :(得分:5)
如果这是游戏,你不应该使用睡眠或计时器。
通常游戏都有自己的内部时钟机制。这意味着您将尝试尽可能快地渲染帧。将使用当前游戏时间调用OnRender方法。您可以使用它来确定是否有足够的时间转到下一个屏幕。
这意味着您将在第1帧中获得时间点A.您将在第2帧中获得Delta或其他时间点B.您可以通过使用增量或计算增量来确定已经过了多少时间。三角洲自己。对于计时情况,这是一种非常有效的机制,并且当游戏是单线程时效果很好。任何程序的想法都是永远不会阻止任何事情。
通常阻塞的原因是I / O,例如从磁盘读取,网络或将数据放在GPU上。在你的情况下,你可以不受阻碍地完成所有事情。
这是https://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step
上的一个不错的页面答案 1 :(得分:3)
这有一个标准机制:Object.wait()和Object.notify()(带有重载/变体)。你只是等待一个事件发生在一个线程中,而另一个线程则负责通知你(或notifyAll
的所有人)。
您还可以使用java.util.concurrent
中引入的新Condition机制。
答案 2 :(得分:0)
long t1=0,t2=0;
long nanoWaitTime=10000; //to wait at least 10000 nano-seconds
t1=System.nanoTime();
//start waiting
long count=0;
boolean releaseCpuResources=true;
while(Math.abs(t2-t1)<nanoWaitTime)
{
t2=System.nanoTime(); //needs maybe 1000 cycles of cpu to get this value.
//so this is like busy-wait
//and minimum step may be 1 micro-seconds or more
if(releaseCpuResources)
{
count++;
if(count>1000)Thread.sleep(1);//after too many iterations, cpu gets overwhelmed
//so Thread.sleep makes it better for large waiting
//times
//but precision is lost. Like uncertainity principle
//but in a quantized fashion
}
}
// here continue to work after waiting
分辨率或精度可能不是您想要的所有cpu。
答案 3 :(得分:0)
如果你在游戏中制作它,为什么不尝试在libgdx中使用像Actions这样的东西?你只是把不同的演员连在一起。每当可见性或位置等属性达到您想要的值时,您都会触发下一个操作。在游戏的每个更新循环期间检查属性条件。
或者如果它是一个摇摆应用程序,请使用计时器来检查这些属性。