Tom*_*son 1 java performance game-engine slick2d
我使用Swing创建了一个游戏,它有点不可靠,所以我开始使用Slick2D游戏引擎重新制作它,我遇到了问题.
每次调用更新方法时,游戏的背景在屏幕上以一定的像素滚动.这样可以加速和减速,因此背景会非常快速地移动,然后非常慢,并且会保持波动.
我试过*delta(它监视刷新率,我想!)我的值移动背景,但因为这不会给我一个确切的值我可以用来将背景重置到左侧(2背景移动)从右到左.左手一个向右移动-800像素).
造成这种情况的原因是什么?我如何克服它?
谢谢
jef*_*unt 11
这里有一些阅读(有一个特定于gamedev的StackExchange站点,BTW):
这些文章中最重要的一点是事物以一定的速率超过一定时间,而不是超过一定数量的帧.由于帧速率可以不可预测地改变,因此基于时间和基于帧的移动不会彼此等同.
这里有一些解释......
因此,您的计算机和操作系统是多线程的,因此,您永远不会知道应用程序外部发生了什么,以及机器上的总体负载是什么.因此,即使您处于全屏模式,也无法独占访问CPU.所以,这是为什么事情加速和减速的一个因素.
Delta在Slick2D中的用途是允许您处理此加速/减速,并允许您的应用程序动态更改其帧速率,以便屏幕上的感知移动不会因您的计算机负载而发生变化.delta 不是监视器的刷新率(它是恒定的); delta是自上次调用以来经过的毫秒数update.
那你如何正确使用这个三角洲呢?假设你的背景应该以100px/sec的速度移动.如果delta(在给定的调用中update)是33毫秒,那么你应该在此更新中移动背景的数量是100*(33/1000.0) = 0.033- 所以你将背景移动0.033像素.这可能看起来很奇怪,你可能想知道移动<1像素是什么意思,但坚持我.
首先,你必须将它除以1000.0而不是1000的原因是因为你希望 delta的移动给你一个浮点数.
您会注意到Slick2D中的2D图形内容使用浮点值来跟踪事物的位置.那是因为如果delta告诉你移动0.033像素的东西,你需要移动0.033:不是0,而不是1像素.子像素移动对于平滑帧速率的增加/减少也是至关重要的,因为对几个子像素移动的累积效果是,当时刻正确时,所有这些小移动加起来整个像素,并且它非常平滑,从而产生正确的整体运动速度.
您可能会认为,由于您的屏幕将图像解析为给定像素而非子像素元素,因此如果您进行子像素移动并不重要,但如果将所有移动跟踪转换为浮点数,您将会看到你观察到的影响很大程度上消失了.