JAVA游戏开发之FPS精准控制
2014-03-02 23:23
357 查看
目录
JAVA游戏开发之FPS精准控制... 1
1 概述... 2
1.1 编写目的... 3
2 FPS精准控制... 3
2.1 FPS描述... 3
2.2 大众版FPS控制... 3
2.3 大众版效果展示... 4
2.4 精准FPS控制... 5
2.5 精准效果图... 7
3 谢幕... 8
1 概述
前半年一直想用JAVA Swing做一个冒险岛(盛大的一款网络游戏)的模拟器,于是就开始了长达半年左右的开发,由于以前根本不知道盛大游戏的数据文件格式,以及一些关键技术,so 各种Goole,终于将数据文件能够完整的解析,并且可以将数据文件中的音乐、图像、动画等资源展示出来,到这里最为关键的东西搞定了,那么就只剩下JAVA方面拿的东西了,然后又用了一段事件搭建游戏框架,期间遇到各种难缠问题,不过还是完美解决了,最终这个模拟器基本完成。
1.1 编写目的
在开发冒险岛模拟器的期间,遇到了一个游戏开发较关键的技术FPS精准控制,FPS如果不能精准控制,那么将会引发一系列问题,首当其冲的就是游戏画面无法流畅的展示出来,我们都知道,游戏画面及操作是否流畅是我们继续玩下去的最基本动力(最起码我是这么想的),如果一个游戏都不能够流畅的表现出来,那么我们也不会有基情继续玩下去。
OK,罗里吧嗦了这么久,下面直入主题-- FPS精准控制。
2 FPS精准控制
2.1 FPS描述
所谓的FPS其实就是指游戏画面刷新帧频(游戏画面刷新频率),也就是说游戏中每秒钟能够绘制多少次图像,如果FPS控制不精确那么游戏界面的动画会出现时快时慢,阅读本博的读者应该都是有一定的游戏开发基础,知道其实控制每秒的刷新帧数可以通过线程对象的sleep(long time)方法来控制每次绘制完图像的休眠时间,从而达到FPS的控制。
2.2 大众版FPS控制
以下是大众版的FPS控制代码:
2.3 大众版效果展示
以上就是大众化的FPS控制关键代码,该run()方法是一个线程内的方法,其中fpsTime是计算出每帧需要绘制的毫秒数公式:fpsTime= 1000(毫秒) / 定制的FPS数值。大家可以看到我是使用System.nanoTime()来获得当前时间的(纳秒,1毫秒=1000000纳秒),具体休眠多少事件已经计算我都加了注释,大家应该是可以看懂的,好了,上面的代码就是大众版的FPS控制,让我们看一下运行结果图(三张):
2.4 精准FPS控制
如此,大家可以看到上面的代码虽然可以做到FPS控制,但是这个FPS数值是有区间的(时快时慢),大家可能会问,到底问题出在哪里呢?答案就是sleep(long time)方法,线程是可以帮助我们休眠指定的毫秒时间的,但是大家不要忘记,代码的执行速度那可是比毫秒要快几个量级的啊,那么又会有人问那该要如何精确控制休眠事件呢?
大家看一下代码:
比较两次的代码,其实无非就是加了以下代码:
看到这里,大家应该会恍然大悟吧!其实关键点就是在绘制图像休眠后,再看一下是否达到了每帧需要绘制的指定时间,如果还没有达到,那么——循环吧!
2.5 精准效果图
大家可以看到,三张图的FPS数值区间一直都保持在59-61左右,这样应该就达到了大家的要求了吧。
3 谢幕
非常感谢大家能够看完本博文,有什么不足之处敬请指出,非常感谢!!!
最后补一句, 本来我是在Word文档写的,打算直接贴过来,没想到,样式这么难看~~ 大家凑活这看吧,呵呵。
文章转载:http://blog.csdn.net/zhaohongda33/article/details/9373265
JAVA游戏开发之FPS精准控制... 1
1 概述... 2
1.1 编写目的... 3
2 FPS精准控制... 3
2.1 FPS描述... 3
2.2 大众版FPS控制... 3
2.3 大众版效果展示... 4
2.4 精准FPS控制... 5
2.5 精准效果图... 7
3 谢幕... 8
1 概述
前半年一直想用JAVA Swing做一个冒险岛(盛大的一款网络游戏)的模拟器,于是就开始了长达半年左右的开发,由于以前根本不知道盛大游戏的数据文件格式,以及一些关键技术,so 各种Goole,终于将数据文件能够完整的解析,并且可以将数据文件中的音乐、图像、动画等资源展示出来,到这里最为关键的东西搞定了,那么就只剩下JAVA方面拿的东西了,然后又用了一段事件搭建游戏框架,期间遇到各种难缠问题,不过还是完美解决了,最终这个模拟器基本完成。
1.1 编写目的
在开发冒险岛模拟器的期间,遇到了一个游戏开发较关键的技术FPS精准控制,FPS如果不能精准控制,那么将会引发一系列问题,首当其冲的就是游戏画面无法流畅的展示出来,我们都知道,游戏画面及操作是否流畅是我们继续玩下去的最基本动力(最起码我是这么想的),如果一个游戏都不能够流畅的表现出来,那么我们也不会有基情继续玩下去。
OK,罗里吧嗦了这么久,下面直入主题-- FPS精准控制。
2 FPS精准控制
2.1 FPS描述
所谓的FPS其实就是指游戏画面刷新帧频(游戏画面刷新频率),也就是说游戏中每秒钟能够绘制多少次图像,如果FPS控制不精确那么游戏界面的动画会出现时快时慢,阅读本博的读者应该都是有一定的游戏开发基础,知道其实控制每秒的刷新帧数可以通过线程对象的sleep(long time)方法来控制每次绘制完图像的休眠时间,从而达到FPS的控制。
2.2 大众版FPS控制
以下是大众版的FPS控制代码:
public void run() { // 计算出指定FPS数值中,每帧需要多少时间 long fpsTime = (long) ((Double.valueOf(1000) / Double.valueOf(DEFAULT_FPS)) * 1000000); // 绘制图像前的时间戳 long now = 0; // 每次绘制图像耗时(毫秒) long total = 0; while (true) { now = System.nanoTime(); // 绘制图像 draw(stageDrawCallback); try { // 除去绘制之后还需要休眠的时间 total = System.nanoTime() - now; if (total > fpsTime){ // 如果本次绘制时间超过每帧需要绘制的时间,则直接继续绘制 continue; } Thread.sleep((fpsTime - (System.nanoTime() - now)) / 1000000); } catch (InterruptedException e) { e.printStackTrace(); } } }
2.3 大众版效果展示
以上就是大众化的FPS控制关键代码,该run()方法是一个线程内的方法,其中fpsTime是计算出每帧需要绘制的毫秒数公式:fpsTime= 1000(毫秒) / 定制的FPS数值。大家可以看到我是使用System.nanoTime()来获得当前时间的(纳秒,1毫秒=1000000纳秒),具体休眠多少事件已经计算我都加了注释,大家应该是可以看懂的,好了,上面的代码就是大众版的FPS控制,让我们看一下运行结果图(三张):
2.4 精准FPS控制
如此,大家可以看到上面的代码虽然可以做到FPS控制,但是这个FPS数值是有区间的(时快时慢),大家可能会问,到底问题出在哪里呢?答案就是sleep(long time)方法,线程是可以帮助我们休眠指定的毫秒时间的,但是大家不要忘记,代码的执行速度那可是比毫秒要快几个量级的啊,那么又会有人问那该要如何精确控制休眠事件呢?
大家看一下代码:
publicvoid run() { // 计算出指定FPS数值中,每帧需要多少时间 long fpsTime = (long) ((Double.valueOf(1000) / Double.valueOf(DEFAULT_FPS)) * 1000000); // 绘制图像前的时间戳 long now = 0; // 每次绘制图像耗时(毫秒) long total = 0; while(true) { now = System.nanoTime(); // 绘制图像 draw(stageDrawCallback); try{ // 除去绘制之后还需要休眠的时间 total = System.nanoTime() - now; if(total > fpsTime){ // 如果本次绘制时间超过每帧需要绘制的时间,则直接继续绘制 continue; } Thread.sleep((fpsTime - (System.nanoTime()- now)) / 1000000); } catch (InterruptedException e) { e.printStackTrace(); } while((System.nanoTime()- now) < fpsTime){ // 使用循环,精确控制每帧绘制时长 System.nanoTime(); } } }
比较两次的代码,其实无非就是加了以下代码:
while((System.nanoTime() - now) < fpsTime){ // 使用循环,精确控制每帧绘制时长 System.nanoTime(); }
看到这里,大家应该会恍然大悟吧!其实关键点就是在绘制图像休眠后,再看一下是否达到了每帧需要绘制的指定时间,如果还没有达到,那么——循环吧!
2.5 精准效果图
大家可以看到,三张图的FPS数值区间一直都保持在59-61左右,这样应该就达到了大家的要求了吧。
3 谢幕
非常感谢大家能够看完本博文,有什么不足之处敬请指出,非常感谢!!!
最后补一句, 本来我是在Word文档写的,打算直接贴过来,没想到,样式这么难看~~ 大家凑活这看吧,呵呵。
文章转载:http://blog.csdn.net/zhaohongda33/article/details/9373265
相关文章推荐
- JAVA 游戏开发之——FPS(帧频刷新率)精准控制
- Java游戏开发中怎样才能获得更快的FPS?
- Java游戏开发中怎样才能获得更快的FPS? 推荐
- JAVA游戏开发计算显示FPS
- Java游戏开发中怎样才能获得更快的FPS?
- Java游戏开发中怎样才能获得更快的FPS?
- Java游戏开发中怎样才能获得更快的FPS?
- Java开发小游戏 用键盘控制精灵在游戏中上下左右跑动 窗体小游戏可打包下载,解压后双击start运行
- Java游戏开发日志(2007-6-1)
- Java游戏开发组件LGame简易测试版发布(版本号:0.1.0)
- Java游戏开发案例-方块游戏
- 干了半年的java Web,知道自己特别喜欢游戏开发,那就去干吧
- 人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[5]——一树双花
- 基于Kinect for Windows SDK beta开发语音命令,实现语音控制游戏
- JAVA开发的华容道游戏
- 专业 Java 游戏开发教程:来自 Game Developers Conference 2004
- Java开发的游戏之一 五子棋 完整源代码
- 用JAVA开发的局域网通讯工具,支持聊天,文件传输,远程控制。。。
- 阿里巴巴Java开发手册- 控制语句
- 【游戏开发备注之二】配置Xcode版本控制SVN详细步骤内含部分问题解决方案