|
|
1
2
我几乎同意Bill所说的一切,特别是关于Swing的神秘部分(尽管实际上并不比其他图形环境更神秘)。 举几个例子,30 fps(这是大多数交错屏幕产生的频率)是每33毫秒1帧。60 fps大约是人类能够感知到的最高频率(1帧/16毫秒),大多数LCD显示器以60或75 Hz刷新,这将是实际产生的绝对最快速度。20毫秒/帧是50帧/秒的帧速率,这也与欧洲地区的电频率一致,只是肉眼可以看到。 我建议反对的主要做法是在一个紧密的while循环中做每件事。这将导致您的游戏速度高度依赖于您所使用的系统。在速度更快的系统上,你可能会得到帧喷出速度超过玩家的反应速度,即使它在较旧的系统上合理地播放(或者你在破旧的机器上会遇到相反的问题)。使用计时器可以使速率更加一致,但在错过帧截止日期的情况下,必须进行一些防御性检查。这意味着您的计时器需要知道计算何时完成,因此如果另一帧经过但尚未完成,则它将跳过下一帧。更好的是,您可以记录计算之间实际经过的时间,并相应地调整角色的实际移动。
令人惊讶的是,与我在你的另一个问题上发布的内容相比,我所说的大部分内容实际上都是新的。 |
|
|
2
2
behaviour of Thread.sleep() --从图中可以看出,由于系统处于中等繁忙状态,操作系统无法满足我们要求的睡眠时间。如果你需要100毫秒的平均睡眠时间,那么20毫秒左右的抖动不会太糟糕。但当你要求20ms时,20ms抖动可能会更明显。。。 所以我可能会以每秒10帧(100毫秒暂停)的速度开始,看看效果如何。 就代码而言,如果您的游戏逻辑在每个滴答声中花费的时间大致相同,那么我将从逻辑重新绘制每个滴答声的睡眠开始。请记住,您需要同步正在绘制的内容,因此在游戏逻辑线程中,理想情况下,您需要避免长时间持有锁。 |
|
|
3
1
swing的这一领域可能是Java中最“黑魔法”的领域。这可能很棘手,有很多方法。
因此,在大多数情况下,在一个连续的线程中,在绘制系统之外进行计算,然后在顶级组件中调用重绘函数。重新绘制应该将绘制事件传递到AWT线程上的所有组件,所以这不应该是一个问题。
这是应该怎么做的,基本的,但它可能会很慢,有很多技巧来加速它。你可能想找一本关于swing编程和游戏的书。 |
|
|
user29759326 · 如何返回递归函数中的最后一个值? 1 年前 |
|
|
malife89 · 将java中的字符串读取为正确的日期格式 1 年前 |
|
|
Tim · 在java中,有没有更快的方法将字节数组写入文件? 1 年前 |
|
|
rudraraj · java中未声明最终变量 1 年前 |
|
|
Bala Ji · 以下BFS的实施效率如何? 1 年前 |