从2008年发布的第一个JavaFX版本开始,在这几年里,断断续续的利用业余时间进行JavaFX的学习和开发,也怀有用JavaFX进行游戏开发的想法。
不过目前决定暂时减少JavaFX游戏开发相关的内容,仅仅将JavaFX作为一个Java的GUI来进行开发自己的工具和软件,除非后续Oracle有重大的更新和改变现状的措施。
下面我会谈谈在JavaFX开发中遇到的一些问题,以及和其他几种技术相比的不足和缺陷。
首先的问题,自然是我为什么会选择使用JavaFX?
这个原因很简单,对于大多数想要使用JavaFX的人来说,无外乎只有一个原因:自己是javaer。
从读大学开始我就是自学Java的,大学的时候用Java做过各种游戏,软件,毕业后从事Android开发工作,后来又对Unity3D感兴趣,转向Unity3D开发,期间做过C#的项目,也做过几个C++的项目,但从某种程度上来说,Java才是我最熟悉的语言。你可以说,"语言只是工具,项目需求什么就做什么",但这也不能否认每个开发者都有自己最熟悉和最喜欢用的开发语言以及工具。
就像C#的开发者会使用Silverlight一样,Java开发者大多会选择JavaFX。不过对于微软的追随者来说,还是很幸苦的。微软的技术更新很快,几乎3年左右就会丢弃,重新开发。从Winform,WPF,到Sliverlight(事实上Sliverlight已经被微软放弃)。由于WP8的游戏开发技术XNA已被微软放弃,所以WP8进行一次大的革新也是必然的结果。还好,微软财大气粗,也不靠这发财。
JavaFX从08年底开始问世,中间经历了SUN被收购,后来又推出2.x版本至今。
当然,对于现在的Oracle来说,Java不算什么,JavaFX更不算什么。目前JDK和JavaFX都已经有开源项目OpenJDK,OpenJFX了。
这样也导致了很多的问题,去年由于JDK连续爆出重大漏洞,导致JDK8推迟了半年发布。另外从JavaFX来说,OpenJFX目前已经很久没有什么重大更新了,3D不算。因为JavaFX 3D目前几乎无法完整的应用到项目中,比它优秀成熟的3D技术很多,秀逗了才会选它。而OpenJFX里面又有很多分支,3D模块是单独一个分支进行开发,还有个JavaFXPorts,主要是进行JavaFX在移动平台Android和IOS上运行的研究。
然而即使是JavaFX部署到Android和IOS上的步骤也很繁琐,还会有很多的API兼容性问题。从某种方面来讲,JavaFX应用到Android和IOS上目前也只是可行,无法实际广泛应用。
接下来的问题才是重点,由于Java之前连续爆出重大漏洞,目前的Java Applet程序必须要在Java安全性为中或者高的情况下才能运行,否则只会弹出下面的对话框。
目前即使是发布到网站上,如果没有经过正规机构颁发的签名,是无法运行的(自签名也不行)。这样对于普通的开发者来说,几乎是完全无法在网站上发布自己的JavaFX应用。
除非是自己添加指定的站点到例外列表里,如下图:
然后即使是你添加到了站点列表了,又会弹出下面一个大框:
你觉得任何一个访问某个站点的人,会进行这样一系列的操作之后,在弹出一个大框告诉你存在安全风险,还会固执的留在这个页面吗?
我相信没有一个人会,除了开发者。
但是如果JavaFX不发布在网站上,那么它就已经失去了和其他技术竞争的资本了。毕竟在本地使用的话,可替代的更好的技术比比皆是,JavaFX毫无存在感。
所以说在不考虑效率的问题下,JavaFX目前有以下问题阻碍发展:
1.OpenJFX模块较多,负责各个模块的同时开发的团队估计不少,但是很多却都是半成品,无法应用。就像上面说的3D模块,应用到Android和IOS,即使是导出为本地程序和安装包,也会有"安装包图标很难的修改,安装界面无法定制"等各种问题,除非自己手动使用Inno Setup,exe4j等打包,但通常开发工具都是减少工作量的,没见过这种要自己修改增加工作量的。
2.Java Applet在网络上运行限制太多,自己开发的程序几乎完全没法放在网络上让大家运行使用,虽然这是因为Java会请求访问本地文件的权限导致安全性不好,但为何不限制Applet程序无法访问本地文件,最好是做一个mini sdk专门进行网络分发的程序和游戏开发。
3.几经缩减,但是JRE的大小还是太大。我做的Unity游戏放在网络上,别人分分钟就可以下载Unity的运行环境并运行,但是下载JRE耗时太长,没人愿意等候太久。更何况,Java插件本身就是属于冷门插件,用的人太少。
4.JavaFX目前读取资源,在eclipse IDE上运行,本机运行和Web运行都存在差异。至于能不能找到两全的解决方式,我也未进行深入研究。
当然,还有其他的问题,我就不一一列出了。
目前比较火的,那自然当属HTML5了,不过根据我运行了一些市面上已经有的Demo,发现手机上的体验不行,很多demo只有十几的FPS,而且不是专门为手机定制的页面的话,在手机上运行也没啥体验可言。不过最重要的优点就是各个平台都可以运行,即使是不支持flash的ipad等设备也能运行,由此看来HTML5也有一定的潜力。
不过Unity3D也加入了这场大战,在Unity3D 5的预览版里面,已经可以导出为HTML5了,采用了WebGL。效率的话,也还可以,当然肯定是比native差很多。现在暂时不支持mobile,我在手机上尝试过运行官方的示例,发现可以载入,提示不支持手机,但可以继续载入,运行,不过无法点击。但都是迟早的事,所以说Unity3D也是一个有力的竞争者。
相对而言,JavaFX就逊色了很多,各个方面都有不少的差距。
个人建议,JavaFX当作Swing的替代品就好,进行游戏开发目前还是不是很适合。
本文章为个人原创,转载请注明出处,本人CSDN博客:http://blog.csdn.net/wingfourever 个人博客地址:http://www.wjfxgame.com。
-----------------------------------------------------------------------
很少没写这么长的内容了,不过最近越来越发现JavaFX进行游戏开发的问题很多,当然作为GUI技术还是不错的,我也用它做了很多工具和软件。
如何取舍就看大家的选择了。
JavaFX的教程也还是会在CSDN和我的个人博客上更新。
----------------------------------------------------------------------