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步,准备素材图片 包含鸡蛋.骨头 ...
随机推荐
- python爬虫——爬取天气预报信息
在本文中,我们将学习如何使用代理IP爬取天气预报信息.我们将使用 Python 编写程序,并使用 requests 和 BeautifulSoup 库来获取和解析 HTML.此外,我们还将使用代理服务 ...
- 7.4 通过API枚举进程权限
GetTokenInformation 用于检索进程或线程的令牌(Token)信息.Token是一个数据结构,其包含有关进程或线程的安全上下文,代表当前用户或服务的安全标识符和权限信息.GetToke ...
- 算法打卡|Day4 链表part02
Day4 链表part02 今日任务 ● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II 目录 Day4 链表part0 ...
- SQL连接符Left Join小实例
在一数据移植项目中,Left Join的应用 项目要求根据卡号获取最终用户号,规则如下: 1.根据card查询tbl_TestA表,获取userid,根据userid作为id查询tbl_TestB获 ...
- Http协议之libcurl实现
一.libcurl简介 libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcurl同样支持 ...
- python第6章code
01条件判断语句 # 条件判断语句(if语句)# 语法:if 条件表达式 : # 代码块# 执行的流程:if语句在执行时,会先对条件表达式进行求值判断,# 如果为True,则执行if后的语句# 如果为 ...
- Android Tools Project Site
Android Tools Project Site Search this site Projects Overview Screenshots Release Status Roadmap D ...
- 常见的企业Wiki
企业Wiki(Enterprise Wiki)指适用于企业或组织内部使用的Wiki.与非企业Wiki(如著名的MediaWiki)最根本的不同点在于,企业Wiki是为企业量身定做的Wiki.通过鼓励. ...
- openwrt ping: sendto: Network unreachable解决办法
root@OpenWrt:/# ping zhihu.com PING zhihu.com (103.41.167.234): 56 data bytes ping: sendto: Network ...
- Windows上的多jdk版本管理工具
前言 Java在Windows上因为版本太多导致难以管理,这个项目可以很好的解决这点 项目地址 GitHub - ystyle/jvms: JDK Version Manager (JVMS) for ...