libGDX游戏开发之修改游戏帧数FPS(十三)
libGDX游戏开发之修改游戏帧数FPS(十三)
libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm…国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式。
FPS百科:
FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。通常,要避免动作不流畅的最低是30。
我们知道帧数越多越流畅、体验更好,但是这对CPU(核显)、GPU性能有比较高的要求。例如在游戏中FPS=60,女朋友发信息来回复时,切出游戏(窗口焦点不在游戏),这时可以降低FPS减少性能浪费。
libgdx中,通过阅读源码我们知道默认的FPS为每秒60帧,即使焦点不在窗口也是60帧。
/** Target framerate when the window is in the foreground. The CPU sleeps as needed. Use 0 to never sleep. **/
public int foregroundFPS = 60;
/** Target framerate when the window is not in the foreground. The CPU sleeps as needed. Use 0 to never sleep, -1 to not
* render. **/
public int backgroundFPS = 60;
例如设置玩游戏时60帧,切出游戏时30帧,Main代码如下:
public class DesktopLauncher {
public static void main (String[] arg) {
LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
// 默认帧率 60
config.foregroundFPS=60;
// 切出时帧率为30
config.backgroundFPS=30;
new LwjglApplication(new MyGdxGame(), config);
}
}
渲染代码如下:
public class MyGdxGame extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
Stage stage;
Label fpsLabel;
@Override
public void create() {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
stage = new Stage();
Label.LabelStyle style = new Label.LabelStyle(new BitmapFont(), Color.WHITE);
fpsLabel = new Label("FPS", style);
fpsLabel.setPosition(10, 450);
stage.addActor(fpsLabel);
// 手动调整CPU帧率 默认 60
Gdx.graphics.setForegroundFPS(90);
}
@Override
public void render() {
ScreenUtils.clear(1, 0, 0, 1);
batch.begin();
batch.draw(img, 0, 0);
batch.end();
fpsLabel.setText("FPS: " + Gdx.graphics.getFramesPerSecond());
stage.draw();
}
@Override
public void dispose() {
batch.dispose();
img.dispose();
}
}
效果:在游戏中,我手动调节的90不生效,就去Discord社区问了下人。

焦点不在游戏时降到30是正确的:

Discord回答:

lingkang — 今天01:57
hi
My graphics card is 1660 ti
The FPS 90 I set is invalid, still 60
How do I set high FPS?
James — 今天02:13
If your monitor is 60Hz, you must disable vsync (LWJGL2: config.vSyncEnabled = false; LWJGL3: config.useVsync(false); - might also have to change driver settings but hopefully not) to go beyond 60fps.
For LWJGL2 you also have to do config.foregroundFPS = 0 because it's by default limited to 60.
在create中修改一下,FPS修改不超过60可以不关闭。
Gdx.graphics.useVSync(false);

通过阅读源码:

也可以通过Gdx.graphics.setForegroundFPS(-1);放飞自我:1900FPS 显卡威力!

以前经常看源码,看多脑壳疼,懒得看。遇到问题经常search白嫖,现在遇到问题还是看一圈源码算啦!
libGDX游戏开发之修改游戏帧数FPS(十三)的更多相关文章
- [Unity3D]查看与设置游戏帧数FPS
原地址:http://blog.sina.com.cn/s/blog_5b6cb9500101bta4.html 关于FPS,在PC端来说,游戏帧数跑得越高越好,FPS跑得越高游戏就越流畅,当然太高也 ...
- 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)
在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...
- Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)
Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...
- Unity 2D游戏开发教程之游戏精灵的开火状态
Unity 2D游戏开发教程之游戏精灵的开火状态 精灵的开火状态 “开火”就是发射子弹的意思,在战争类型的电影或者电视剧中,主角们就爱这么说!本节打算为精灵添加发射子弹的能力.因为本游戏在后面会引入敌 ...
- Unity 2D游戏开发教程之游戏中精灵的跳跃状态
Unity 2D游戏开发教程之游戏中精灵的跳跃状态 精灵的跳跃状态 为了让游戏中的精灵有更大的活动范围,上一节为游戏场景添加了多个地面,于是精灵可以从高的地面移动到低的地面处,如图2-14所示.但是却 ...
- 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)
1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...
- 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)
对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2) ...
- [Unity3D]Unity3D游戏开发Lua随着游戏的债券(于)
---------------------------------------------------------------------------------------------------- ...
- Python游戏开发:pygame游戏开发常用数据结构
一.数组与列表 数组可以理解为简化的列表.像我们之前使用的pygame.sprite.Group这样的精灵组,也是一个列表.列表的元素是可变的,它具有添加.删除.搜索.排序等多种方法. 1.一维列表 ...
- 【VC++游戏开发】智力游戏——鸡蛋里挑骨头(仿扫雷)
在我学习游戏开发的过程中,遇到的最大的麻烦就是不知道一个游戏的完整实现过程,代码倒是其次. 这里,总结一下我做过的游戏.主要是梳理整每一个步骤. 先看下终于的效果 第1步,准备素材图片 包含鸡蛋.骨头 ...
随机推荐
- 一些H5对接微信JSSDK的问题记录
这里给大家分享我在实际生活中总结出来的一些知识,希望对大家有所帮助 一.SDK引入 这里提供两套引入流程,一套是vue2.0及其他h5项目,一套是vue3.0的引入流程 不懂的也可以看我之前的一篇详细 ...
- 兴达易控modbus转profinet网关与温度变送器兼容转modbus tcp网口协议
兴达易控modbus转profinet网关与流量变送器兼容转modbusTCP网口协议 本案例演示电磁流量计通过兴达易控modbus转profinet网关(XD-MDPN100)连接西门子1200PL ...
- 一个 println 竟然比 volatile 还好使?
前两天一个小伙伴突然找我求助,说准备换个坑,最近在系统复习多线程知识,但遇到了一个刷新认知的问题-- 小伙伴:Effective JAVA 里的并发章节里,有一段关于可见性的描述.下面这段代码会出现死 ...
- Script:10g中显示Active Session Count by Wait Class
摘自: http://www.askmaclean.com/archives/script-10g-show-active-session-count-wait-class.html SELECT T ...
- python接口自动化 之excel读取测试数据
一.当你拥有一个excel版的接口用例 excel中有用例名称.url.请求方式和请求参数 二.获取excel的Url.请求方式和请求参数 # 单独获取某个单元格的值,第二行第二列# 第二行数据 ro ...
- javascript继承的 6 种方法
1. 原型链继承 2. 借用构造函数继承 3. 组合继承(原型+借用构造) 4. 原型式继承 5. 寄生式继承 6. 寄生组合式继承
- 【数字图像处理】Matlab实现-图像增强-彩色图像增强(彩虹编码,热金属编码)
伪彩色处理 伪彩色增强:把一幅黑白域图像的不同灰度级映射为一幅彩色图像的技术手段. 伪彩色增强有很多种方法,而下面的增强方法则是使用的空间域灰度级-彩色变换法. 空间域灰度级-彩色变换法:可以将灰度图 ...
- 在RT-thread studio 中生成 Doxgen文档
转载自RTT论坛 实测可以使用
- Electron原生菜单
.markdown-body { color: rgba(56, 56, 56, 1); font-size: 15px; line-height: 30px; letter-spacing: 2px ...
- pnpm 管理依赖包是如何节省磁盘空间的?
npm 存在的问题 我们经常使用 npm 来管理 node 项目中的包,从 package.json 中读取配置将依赖下载到本地,以保障项目的正常运行. 当项目数量多时,这样的包管理方式会非常的占用电 ...