这不是非常必要的,我只是好奇地看到别人的想法。我知道它没用,只是为了好玩。
现在我知道如何做到这一点,它相当简单。我只是试图找出一种方法来做到这一点,并不需要创建新的变量来挤占我的班级。
这是我将如何做到的:
float timePassed = 0f;
public void update(){
timePassed += deltatime;//Deltatime is just a variable that represents the time passed from one update to another in seconds (it is a float)
if(timePassed >= 5){
//code to be ran every 5 seconds
timePassed -= 5f;
}
}
我想知道的是,如果没有时间传递变量,有办法做到这一点。我有一个statetime(自循环开始以来的时间)变量,我用于其他可以用于此的东西。
答案 0 :(得分:2)
如果目标确实是每X秒运行一次代码,我的第一选择就是使用util.Timer。另一个选择是使用ScheduledExecutorService,它在util.Timer上添加了一些增强功能(更好的异常处理,一个)。
我倾向于避免使用Swing.Timer,因为我更喜欢让EDT(事件调度线程)整洁。
很多人写了一个游戏循环"这比你开始的更接近。搜索"游戏循环"可能会给你几个变种,取决于你是否希望保持稳定的速度。有时候,在一个人不想连续测试和重置的情况下,可以通过使用" AND"来组合这两个功能。操作。例如,如果您将AND 63转换为整数,则可以使用范围0-63进行迭代。这适用于功率为2的范围。
根据您的调用代码的结构,您可能会传入" statetime"变量作为参数并测试它是否大于你想要的X.如果你这样做,我假设被调用代码中的一个步骤将重置" statetime"为零。
另一个想法是传入" startTime"更新方法。然后,您的计时器将测试currentTimeMillis和startTime之间的差异,以查看X秒是否已经过去。同样,你调用的代码应该设置一个新的" startTime"作为这个过程的一部分。这种方法的好处是不需要增加经过的时间。
只要我正在制定想法:也可以创造未来" targetTime"变量并测试currentTimeMillis() - targetTime> 0
startTime或targetTime可以是不可变的,这通常会提供一些轻微的优势,具体取决于它们的使用方式。