声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处:http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com。
有一段时间没有写博客了,但一切都在有条不紊的进行中。
这一段时间没事的时候把基于JavaFX的游戏引擎WJFXGameEngine的效率进行优化了一下(个人博客的示例并未重新上传),简单的2D游戏,在我PC上运行最快可以达到750-800FPS。下面来简单谈谈JavaFX游戏开发上的一些基本问题。
看过JavaFX官方游戏示例BrickBreak的人都可以发现,这个游戏的绘制和逻辑是在Timeline中进行的。JavaFX中的Timeline根据我使用的经验来看,效率不是很高,而且如果数量过多,会很卡。在我游戏引擎中目前的简单的动画是用Timeline实现的,未来会做大改动。
而且之前的教程中,JavaFX简单的游戏框架中讲的也是是用的Timeline。这实际是个很严重的问题。被JavaFX官方示例误导了。
目前我的改动是,使用双线程,一个线程处理绘制,一个线程处理更新操作(这也是很多游戏引擎常用的做法,例如Android游戏引擎AndEngine)。当然,绘制处理必须要在JavaFX MainThread中运行,所以我们使用Platform.runLater来调用绘制操作。虽然它还是在主线程执行,但更新绘制的速度明显更快。之前做的JavaFX游戏示例中,经常出现子弹卡顿等现场,现在不会出现了。
下面是示例代码:
drawThread = new Thread(new Runnable() {
@Override
public void run() {
while (isRunning) {
try {
Thread.sleep(waitTime);
} catch (Exception e) {
}
Platform.runLater(new Runnable() {
@Override
public void run() {
draw(getGraphicsContext2D());
}
});
if (fpsMaker != null) {
fpsMaker.makeFPS();
}
}
}
});
updateThread = new Thread(new Runnable() {
@Override
public void run() {
while (isRunning) {
try {
Thread.sleep(waitTime);
} catch (Exception e) {
}
update();
}
}
});
这个是我的WScreen类里的代码。
线程等待时间waitTime越低的时候,FPS会越快。
FPS快了之后,就有另外一个问题。由于更新操作频繁,如果这样时候你在update等操作里面还依然使用move(4)这样的方法的话,你会发现速度非常的快。
而且由于FPS又不是稳定的,所以我们会发现在不同配置的电脑上运行的情况差别很大,这样,我们就要用到另外一个概念了DeltaTime。
DeltaTime记录的是距离上次Update的时间。我们每次移动的速度* DeltaTime,就可以让我们以不受帧率影响的速率移动了。
当然DeltaTime几乎在所有的游戏引擎或框架中都有这个概念,像我以前用的微软的XNA游戏框架,现在工作的Unity3D开发等。
大家可以看到FPS达到751了,而且相同的示例,已经比较好的解决之前效率造成的卡顿问题。
因本人水平有限,该部分仅作参考。引擎的话,Graphics可以做一层封装。以后如果效率实在不够,可以做其他OpenGL等的封装。
转载请注明出处:http://blog.csdn.net/ml3947
分享到:
相关推荐
用JavaFX技术开发的贪吃蛇游戏
使用javafx开发的游戏,eclipse工程,可直接运行
javaFx开发的炫酷浏览器,适合毕业做毕业设计的同学参考,也适合做javafx的开发人员参考
JavaFX2开发教程 学习的好资料、适合刚刚接触的朋友哇
JavaFX战旗类游戏开发示例,建议结合我的博客文章《JavaFX战旗类游戏开发》来看。该系列七课已完结,有问题可以发我邮件。
此源码是本人从网上购买,他人所写(可以在http://lustrezhang.gotoip4.com/fxgame/这个地址看效果,另外里面还有一个关于javafx的书籍和一些java的书籍,提供学习)如果你觉得不想给分我也可以,你进入...
用JavaFx开发的模仿Windows的画图板工具
主要为大家详细介绍了javafx实现五子棋游戏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
javaFX Demo 模板案例
JavaFx富客户端开发实例,很全的PDF资料 对于学习RIA的朋友来说这是一本很好的入门和提高书籍
javafx
此源码是本人从网上购买,他人所写(可以在http://lustrezhang.gotoip4.com/fxgame/这个地址看效果,另外里面还有一个关于javafx的书籍和一些java的书籍,提供学习)如果你觉得不想给分我也可以,你进入...
不错的javaFX教程。比较全面系统的介绍了javaFX的入门知识。
这是一个利用javaFX编写的一个小游戏,里面的内容是本人为了打好精神,才那样写的,如有不妥之处还情见谅,谢谢合作!
javafx用户界面设计
这是闲来无聊写的一个贪吃蛇小游戏,有兴趣的可以下载来瞧瞧。。
使用Java语言实现的推箱子小游戏源码,javaFX生成的界面,逻辑简单明了,都在代码里注释了,运行效果请看:https://blog.csdn.net/qq_40087987/article/details/82754803
Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich Internet ...
基于JavaFX的抽象Java游戏库 Abstract Java game library based on JavaFX. 基于JavaFX的抽象Java游戏库 Abstract Java game library based on JavaFX. 基于JavaFX的抽象Java游戏库 Abstract Java game library ...
JAVAFX 开发的安全生产倒计时小工具,新手学习菜鸟入门