声明:   本博客文章原创类别的均为个人原创,版权所有。转载请注明出处: 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游戏开发效率浅谈的更多相关文章

  1. 【Unity游戏开发】浅谈Lua和C#中的闭包

    一.前言 目前在Unity游戏开发中,比较流行的两种语言就是Lua和C#.通常的做法是:C#做些核心的功能和接口供Lua调用,Lua主要做些UI模块和一些业务逻辑.这样既能在保持一定的游戏运行效率的同 ...

  2. 【Cocos2d-x游戏开发】浅谈游戏中的坐标系

    无论是开发2D还是开发3D游戏,首先必须弄清楚坐标系的概念.在Cocos2d-x中,需要了解的有OpenGL坐标系.世界坐标系和节点坐标系.  1.UI坐标系 IOS/Android/Windows ...

  3. 【Unity游戏开发】浅谈 NGUI 中的 UIRoot、UIPanel、UICamera 组件

    简介 马三最近换到了一家新的公司撸码,新的公司 UI 部分采用的是 NGUI 插件,而之前的公司用的一直是 Unity 自带的 UGUI,因此马三利用业余时间学习了一下 NGUI 插件的使用,并把知识 ...

  4. 【Unity游戏开发】浅谈Unity游戏开发中的单元测试

    一.单元测试的定义与作用 单元测试定义:单元测试在传统软件开发中是非常重要的工具,它是指对软件中的最小可测试单元进行检查和验证,一般情况下就是对代码中的一个函数去进行验证,检查它的正确性.一个单元测试 ...

  5. 【Unity3d游戏开发】浅谈UGUI中的Canvas以及三种画布渲染模式

    一.Canvas简介 Canvas画布是承载所有UI元素的区域.Canvas实际上是一个游戏对象上绑定了Canvas组件.所有的UI元素都必须是Canvas的自对象.如果场景中没有画布,那么我们创建任 ...

  6. Android安全开发之浅谈密钥硬编码

    Android安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风 ...

  7. Android应用安全开发之浅谈加密算法的坑

      <Android应用安全开发之浅谈加密算法的坑> 作者:阿里移动安全@伊樵,@舟海 阿里聚安全,一站式解决应用开发安全问题     Android开发中,难免会遇到需要加解密一些数据内 ...

  8. 安卓开发_浅谈ListView(SimpleAdapter数组适配器)

    安卓开发_浅谈ListView(ArrayAdapter数组适配器) 学习使用ListView组件和SimapleAdapter适配器实现一个带图标的ListView列表 总共3部分 一.MainAc ...

  9. 安卓开发_浅谈Android动画(四)

    Property动画 概念:属性动画,即通过改变对象属性的动画. 特点:属性动画真正改变了一个UI控件,包括其事件触发焦点的位置 一.重要的动画类及属性值: 1.  ValueAnimator 基本属 ...

随机推荐

  1. solr 从零学习开始

    2010-10 目 录 1 1.1 1.2 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.3 1.3.1 1.3.2 1.4 1.4.1 1.4.2 1.4. ...

  2. Away3D带你360°漫游全景影像

    1代码展示 package { import away3d.containers.View3D; import away3d.controllers.HoverController; import a ...

  3. scrapy新浪天气

    一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: LX终端(LXTermin ...

  4. ls命令显示可执行的文件 ls -F

    ls命令显示可执行的文件  ls -F

  5. Hadoop 源码分析(二四)FSNamesystem

    以下轮到FSNamesystem 出场了. FSNamesystem.java 一共同拥有4573 行.而整个namenode 文件夹下全部的Java 程序总共也仅仅有16876 行,把FSNames ...

  6. Machine Learning #Lab1# Linear Regression

    Machine Learning Lab1 打算把Andrew Ng教授的#Machine Learning#相关的6个实验一一实现了贴出来- 预计时间长度战线会拉的比較长(毕竟JOS的7级浮屠还没搞 ...

  7. 【C/C++多线程编程之四】终止pthread线程

    多线程编程之终止pthread线程       Pthread是 POSIX threads 的简称,是POSIX的线程标准.           终止线程似乎是多线程编程的最后一步,但绝不是本系列教 ...

  8. PHP - 图像处理

    第14章 处理图像 学习要点: 1.创建图像 2.简单小案例 在PHP5中,动态图象的处理要比以前容易得多.PHP5在php.ini文件中包含了GD扩展包,只需去掉GD扩展包的相应注释就可以正常使用了 ...

  9. Qt5窗口设计

    主窗口设计通常是应用程序界面设计的第一步,主窗口主要分为窗口标题,菜单栏,工具栏和状态栏这四个部分,只要在程序设计中分别对四个项目进行设计就可以实现主窗口的编程了.在下面的例子中,我们就以一个打开文件 ...

  10. 基于visual Studio2013解决面试题之0901奇偶站队

     题目