在服务器和客户端主循环中,我有自定义计时器。它们是非常基本的东西。我正在使用System.currentTimeMillis()获取毫秒,然后将其与不同计时器的不同变量进行比较。如果计时器变量小于tickCount,它将运行代码,然后将计时器设置为tickCount + UpdateTime。
这里是一个例子:
long tickCount = System.currentTimeMillis();
if (LastUpdateTime_WoodCutting < tickCount) {
woodcutting();
LastUpdateTime_WoodCutting = tickCount + UpdateTime_WoodCutting;
}
UpdateTime_WoodCutting设置为10。理论上,这应该每10毫秒更新一次此计时器。我敢肯定这不是那么精确,但是总的来说,我遇到的问题是该计时器是10秒计时器,即10000毫秒。
计时器似乎需要20到30秒才能到达。木刻法只是检查玩家类中的计时器是否小于10000,如果是,则将其加10,一旦达到10000或更高,它将执行砍伐游戏中的树的代码。
另一个问题是,客户端使用与服务器完全相同的计时器代码,但是即使在同一台计算机上运行时,它们也不会排队。客户端的计时器似乎在服务器计时器的一半左右结束。我已经尝试了System.currentTimeMillis()的许多替代方法,但它们的工作原理几乎完全相同,因此效果并不理想。
基本上,我要弄清楚的是如何处理这些计时器。看来我没有正确处理它们。在更改我的代码之前,这些计时器可以完美地工作,但是突然之间,它们没有起作用。我不知道这是否是从Gradle或Java(从1.7到1.8)更新的结果,但对此我感到非常沮丧,这是一个相当大的突破性问题。
我的源代码很容易达到将近4万行代码,我无法共享我的所有代码,但是为了更好地帮助我,有人可能需要查看的任何内容,我将尽我所能。