我正在做一个游戏,我在一些(奇怪的)低端Android设备(Galaxy S mini,Galaxy ACE)上遇到问题,实际上硬件不好.FPS适用于85+以及其他设备(HTC Desire,Sony Xperia Arc S,Samsung Galaxy S,HTC Wildfire),FPS是"正常"(约60FPS).计算机上也显示了60 FPS.显然85+ FPS太多,因为游戏体验不同,它可能会给那些玩85FPS +的玩家带来不公平的优势.
我想将FPS限制在MAX 60.
我已经搜索了这个论坛,我已经找到了我正在问的确切问题. 使用Thread.sleep()限制Libgdx游戏中的FPS不起作用
用户@daniel的(已接受)解决方案是这样的:
Thread.sleep((long)(1000/30-Gdx.graphics.getDeltaTime()));
Run Code Online (Sandbox Code Playgroud)
但事情是,这对我不起作用.如果我使用那个代码(30代替60),我得到30-33 FPS或者如果我只使用Daniel的代码我得到大约15-17 FPS.为什么这样,为什么不为我工作?如何将所有设备的FPS限制为MAX 60?我在计算机和设备上测试了这段代码.
任何帮助HIGHLY appriciated.谢谢.
在你的发射器课上;
AndroidApplicationConfiguration config = new AndroidApplicationConfiguration();
config.foregroundFPS = 60;
initialize(new MyGdxGame(), config);
Run Code Online (Sandbox Code Playgroud)
我不知道这是一个新功能还是旧功能.在尝试睡眠之前使用它.
我强烈建议不要通过暂停线程来限制帧,只是为了使所有设备快速或慢速运行的动作保持相同的速度.使用这样的东西在屏幕上移动东西.
x+= speed*Gdx.graphics.getDeltaTime();
Run Code Online (Sandbox Code Playgroud)
祝你在使用libGDX进行冒险时好运,看起来你刚刚开始.因为当我刚开始的时候,我问的是同样的问题:)
编辑:这是一个提示:
如果你的游戏中有碰撞,并且如果用户通过拖动窗口等来休眠游戏,则Gdx.graphics.getDeltaTime()函数将返回意外的高值.例如2秒而不是你期待的16毫秒(60fps).在这种情况下,你的角色将通过墙壁跳跃,碰撞检测将失败.所以这是你可以做的:
我写了一个关于这个主题的页面,它在我的网站的教程部分.看看这个. nightlybuilddigital.ga
你不想那样做。
您需要为任何手机制作游戏。
如果您有类似的代码
player.x+=10f;
Run Code Online (Sandbox Code Playgroud)
您的播放器将在更好的设备上移动得更快。.您需要按增量时间值移动播放器。
player.x+=Gdx.graphics.getDeltaTime()*300; // this would be ~5f if your device is running with 60 fps
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8713 次 |
| 最近记录: |