gpt4 book ai didi

java - Java2D 视频游戏的最佳计时器设计

转载 作者:行者123 更新时间:2023-11-30 03:39:21 25 4
gpt4 key购买 nike

我正在构建一个 Java2D 视频游戏,其中多个 Sprite 会在屏幕上同时更新,并且正在寻找有关通过使用计时器处理更新的最佳方法的反馈。

我正在寻找有关处理计时器设计的最佳方法的反馈,该设计将更新每个 Sprite 的位置。目前,我一直这样做的方式是我有一个计时器。当它过期时,我更新每个 Sprite 的位置。我只将 Sprite 位置更新 1 个像素,以保持运动流畅。如果某些东西的更新速度比 Sprite 的其余部分慢,我会在每 3 或 5 次调用 getImage() 调用(用于获取 Sprite 的当前图标图像)时更新它的位置。

现在,通过这种方法,所有更新都依赖于主计时器,并且 Sprite 的更新相互关联。因此,如果我想加快游戏速度,我只需更新主计时器的刷新率即可。

但是,我不知道这是否是最好的方法。将每个对象放在自己的计时器上会更好,但这会导致其他问题吗?可能会给主paint()方法带来问题?

只是在寻找有关良好设计技术的反馈。

最佳答案

尽管不同 Sprite 之间的动画和移动速度不同,但仍可以继续使用一个计时器,同时拥有完美平滑的动画。方法是将 Sprite 的动画和移动从基于刻度的方法(每次更新移动 x 个像素)更改为基于时间的方法(自上次更新以来耗时移动 x 个像素)。

这意味着您的 Sprite 类(或您拥有的任何类)具有浮点 x 和 y 位置,以及浮点 x 和 y 速度。要更改某个 Sprite 的速度,您需要更改速度(即每毫秒/纳秒的像素/绘图单位等),并且不会受到计时器运行速度的限制。

However, I don't know if this is the best approach. Would it be better to put each object on it's own timer, but would that cause other issues?

如果你确实为每个 Sprite 使用了不同速度的计时器,那么如果计时器在自己的线程上运行,那么你会遇到开销问题,并且如果计时器在同一个线程上执行,那么从技术上讲你就是在更新你的 Sprite基于已经过去了多少时间,但只是将速度常数移至整数。

您还会遇到如何确保计时器持续返回的问题。使用单独的计时器,想象一下游戏中可能有两个 Sprite 并排行走,想要以 10 毫秒的速度更新,但其中一个由于计时器滞后而以 11 毫秒的速度运行,最终其中一个会跑到游戏的后面。其他并扭转并搞乱你的关卡设计或其他一些游戏机制。另一个问题是,它们可能是两个同类的 Sprite ,但现在其中一个 Sprite 比另一个 Sprite 早一个动画帧,而在您看到它们的最初几秒钟内,情况并不成立。通过一个计时器来更新所有一起运行的 Sprite ,您将获得一致的结果。

关于java - Java2D 视频游戏的最佳计时器设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27134753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com