声明: 本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: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
分享到:
相关推荐
1. 桌面应用程序:JavaFX 可以用于开发桌面应用程序,例如图形编辑器、视频播放器和游戏等。 2. 移动应用程序:JavaFX 可以用于开发移动应用程序,例如智能手机和平板电脑上的应用程序。 3. 网络应用程序:JavaFX ...
用JavaFX技术开发的贪吃蛇游戏
对于Java开发者,理解JavaFX的模块化、MVC(模型-视图-控制器)架构以及如何将JavaFX与Spring或其它后端框架集成,都是提高项目开发效率的关键。 压缩包中的“FXWEBBrowsertwo”可能是项目的源代码或编译后的二进制...
在本项目中,我们看到一个使用JavaFX开发的角色扮演游戏(RPG)项目,这是一个很好的学习资源,可以让开发者深入理解JavaFX的基础以及如何将它应用于实际游戏开发。以下是基于这个项目的一些关键知识点: 1. **...
”项目中,我们可以深入学习JavaFX如何被用来开发一款游戏。 首先,JavaFX游戏开发的基础是Java编程语言。JavaFX扩展了Java SE平台,提供了用于创建动态和响应式UI的API。通过学习JavaFX,开发者可以利用其强大的...
JavaFX2.0是JavaFX的重大更新,与之前的1.3版本存在许多不兼容性,因此,如果要涉足JavaFX开发,建议直接采用2.0版本。JavaFX2.0引入了许多新特性,提升了用户体验和开发者的工作效率。 首先,安装JavaFX2.0 SDK是...
【标题】中的“基于JavaFX的迷宫小游戏 Java 、Eclipse 、JavaFX.zip”表明这是一个使用Java编程语言,借助Eclipse IDE和JavaFX图形库开发的迷宫游戏项目。JavaFX是一个用于构建桌面应用、移动应用和网页应用的富...
JavaFX是一个基于Java的GUI编程框架,可以用来开发桌面应用程序、移动应用程序和嵌入式系统。JavaFX提供了一个强大的GUI组件库,可以用来创建丰富的用户界面。JavaFX还提供了一个名为FXML的声明式语言,可以用来描述...
在JavaFX中开发卡牌游戏,主要涉及以下几个关键技术点: 1. **图形用户界面**:JavaFX提供了一系列的UI控件,如Scene、Group、Node等,用于构建游戏界面。开发者可以利用ImageView显示卡牌的图片,使用Label展示卡...
在这个战旗类游戏开发示例中,我们将会深入探讨如何利用JavaFX来设计和实现一款类似棋盘游戏的战旗游戏。 首先,我们需要了解JavaFX的基本结构。一个JavaFX应用通常由多个场景(Scene)和视图(Node)组成。场景是...
此源码是本人从网上购买,他人所写(可以在http://lustrezhang.gotoip4.com/fxgame/这个地址看效果,另外里面还有一个关于javafx的书籍和一些java的书籍,提供学习)如果你觉得不想给分我也可以,你进入...
使用FXML可以将界面设计与逻辑代码分离,提高开发效率。 - **创建用户界面**:详细介绍了如何使用FXML文件来定义用户界面,并将其与Java代码进行绑定。 - **准备工作**:准备开发环境,包括IDE的配置等。 - **创建...
标题中的“推箱子小游戏,javafx完成的界面”揭示了这个项目是一个基于JavaFX技术开发的桌面游戏,游戏类型是经典的推箱子。推箱子游戏源自日本,玩家需要操控一个小人在有限的空间内推动箱子到指定的位置,通常具有...
本项目“JavaFx开发Windows画图板工具”旨在模仿Windows操作系统内置的画图应用,为用户提供一个简单的绘图环境。 首先,JavaFX的Scene类是构建应用界面的基础,它包含了所有可视组件和交互行为。在这个画图板工具...
JavaFX 是一个用于构建桌面、移动和嵌入式设备上富客户端应用的开源图形用户界面(GUI)工具包。它是Java平台的一部分,提供了一系列高级特性,包括2D和3D图形处理、媒体支持、CSS样式以及强大的数据绑定机制。本...
JavaFX开发工具主要包括以下几部分: 1. **JavaFX SDK**:SDK包含了开发JavaFX应用所需的所有库文件、示例代码和文档。在JavaFX 8中,你可以下载并安装SDK来获取必要的运行时和开发环境。 2. **IntelliJ IDEA**:...
### JavaFX 2.0 的 FXML 语言高级教程 #### 概述 JavaFX 2.0 引入了一种新的声明性标记语言——FXML(发音为 “fizz-...无论是初学者还是有经验的开发者,都可以从 FXML 的使用中获益,从而提高开发效率和用户体验。
《使用JavaFx实现的俄罗斯方块小游戏》是一个利用Java编程语言和JavaFx图形库开发的桌面版游戏。JavaFx是Oracle公司推出的用于构建桌面、移动和嵌入式系统的富客户端应用平台,它提供了丰富的UI控件和强大的图形处理...
"JavaFX 2.0 用户界面开发" JavaFX 2.0 是一种基于 Java 技术构建的客户端平台,旨在帮助开发者创建和部署跨平台且表现一致的 Rich Internet Application(RIAs)。JavaFX 平台提供了一套丰富的图形和媒体 API,...
JavaFX开发的示例代码