我们使用OpenFl引擎开发了手机网游《超级足球》,已经在删档内测了,估计是国内第一款用OpenFL引擎做的手机网游了。本文就来总结下使用OpenFL引擎的心得。
一、OpenFL的特色
OpenFL是Open Flash Library的简写,从名字能看出它的目标是兼容Flash API,实际也正是如此,具体来说有以下特色:
1、它实现了Flash as3绝大部分的API(不包括Stage3D部分);
2、它跨平台性好,能编译出Flash、Android、iOS、Windows等不同平台的产品;
3、编译出来的Android、iOS、Windows产品是原生C++语言,比Flash虚拟机有更高的性能;
4、OpenFL是用haxe和C++编写的,haxe与as3语法非常接近,比as3更强大。
另外,OpenFL说它还支持HTML5、BlackBerry、FireFox OS和Tizen,但HTML5本身的性能有限,BlackBerry几个平台目前比例很低,我们基本无视了。
正是因为haxe类似as3、OpenFL实现了Flash绝大部分API,我们招聘的as3程序员看半天就能上手开始写代码,之前的经验得到复用。
而在Flash上积累的库代码也比较容易移植到haxe上来,在haxe官网上列出从Flash移植过来的库有:box2d、flambe、flixel、flashpunk等等。
我们花了5人日就把Flash as3上的骨骼动画库DragonBones移植到了haxe上,并修复了原版的一些bug,这些都离不开haxe和OpenFL。
二、我们的改进
虽然OpenFL的showcase列举了近100个游戏,但基本都是单机游戏,而且轻度小游戏居多,用来做复杂些的手机网游,还需要加强火力,我们对OpenFL引擎、相关库和工具做了一系列的改进。
2.1新增对压缩纹理的支持
Android平台在2.3版本后都支持ETC1压缩纹理,就像iOS都支持PVRTC压缩纹理一样。使用压缩纹理,图片的文件大小只有PNG的30%左右,内存占用一般只有PNG的20%不到,还省了PNG解码的CPU消耗,在iOS上通常都会使用压缩纹理,但OpenFL引擎在Android平台上未支持。
我们在OpenFL引擎的C++部分增加了对压缩纹理ETC1的支持,在《超级足球》中,场景切换一般都在0.5秒内完成,游戏中很少出现loading画面,体验更流畅。
2.2新增对图片缓存的支持
在引擎的C++部分增加了对图片缓存的支持,应用层加载同一图片时,会复用之前已加载的资源,减少了图片的重复读取和内存占用,让应用层无需关注图片缓存管理。
2.3优化空指针错误的处理方案
在Flash页游开发时期,空指针是最常见的错误,只不过Flash Player默认不崩溃,容错性处理了这类错误。
OpenFL对空指针错误的默认处理是崩溃,这个在实际应用时体验不好,我们像Flash那样处理,让空指针错误只是抛异常,并在应用层捕获输出日志,这样既让程序容错性更好,又能查出是哪里出问题,方便fixbug。
2.4对swf库的优化
我们还修复了haxe swf库的一些bug,使OpenFL能直接解析并播放swf文件,美术同学能复用Flash编辑工具和swf资源,减轻了团队学习成本和资源浪费。
2.5对UI编辑的改进
我们UI库主要使用的是stablexui,增加了帧动画、数字的BmpFont、Table、支持记录条数很多的ListView等控件;
实现了直接把PSD文件导出为stablexui文件的脚本和编辑器,极大减轻了从美术资源到UI界面比较琐碎的对坐标工作;
还实现了基于stablexui库的UI查看器;
以上的改进使得我们做UI功能比较轻松了。
2.6其他
haxe支持条件编译,能够用一套代码编译出不同平台的安装包,在多平台运营时,这个特性很重要。
我们还实现了自动生成配置文件、自动处理图片(缩小、拼图、压缩)、每日自动构建不同平台的安装包
三、OpenFL的风险
最大的风险是,OpenFL的稳定性还需进一步提升。从OpenFL版本更新记录来看,近一年的更新比较积极,但整体的稳定性和社区氛围还需要持续加强。目前我们使用OpenFL在个别Android手机上出现崩溃情况,这是相对严重的问题。
从2D游戏的技术选型来说,cocos2d-x比OpenFL更稳定些,如果团队熟悉C++,优先选择cocos2d-x。另一方面如果有大公司对OpenFL进行支持,相信会极大的促进Flash开发者迁移到OpenFL上,毕竟OpenFL不仅能做Flash,还能做Android、iOS应用。
相关推荐
openfl-bitfive, 针对OpenFL的可选blitting面向后端 openfl-bitfiveibm bitfive是一个面向OpenFL-html5的备用后端,用于与canvas驱动应用程序( 如用 HaxePunk插件或者 HaxeFlixel插件框架) 进行使用。 它主要是...
## Introduction Away3D for Flash是Flash Away3D引擎的端口,可为OSX,Windows,iOS,Android和其他应用启用OpenFL C ++本机版本。 ##安装 haxelib install away3d-examples 或者,如果您想安装特定的示例,请...
例如: haxelib git haxeui-core https://github.com/haxeui/haxeui-corehaxelib dev haxeui-openfl path/to/expanded/source/archive用法创建支持OpenFL的新OpenFL应用程序的最简单方法是使用。 这些模板将允许您...
首先,使用安装和 generator-openfl(我们假设您已经预先安装了 )。 npm install -g yo npm install -g generator-openfl 然后生成你的新项目: yo openfl 认识约曼 约曼有一颗金子般的心。 Yeoman 是一个有...
OpenFL-SWF动作
对于“openfl-snapsvg”库,您可以使用这样的开发版本: haxelib git openfl-snapsvg https://github.com/ngrebenshikov/openfl-snapsvg 导航到您的项目的 application.xml 并在包含 OpenFL 和所有依赖于 OpenFL ...
openfl-tiled-flixel 使用带有 HaxeFlixel 的实验胶水报告问题如果您想报告问题,请使用安装 openfl-tiled-flixel haxelib install openfl-tiled-flixel请注意,这个包依赖于 openfl-tiled。如何安装开发版? 要安装...
flixel:由Haxe和OpenFL支持的免费,跨平台2D游戏引擎
您可以浏览项目目录,但使用以下命令列出可用的 OpenFL 示例通常更简单: openfl create 创建样本 找到要创建的样本后,可以使用“create”命令生成副本: openfl create PiratePig 这将在当前目录中创建一个...
前端项目-openfl,一个快速、高效的二维跨平台开发库。
OpenFL.org 这是的来源。 您可以使用构建站点。 它应该在Linux,macOS或适用于Windows的Ubuntu Bash Shell的Unix环境中工作。 确保已安装Ruby,然后安装Bundler( gem install bundler ),... 感谢您使用OpenFL!
OpenFL SockJS客户端库 跨平台的SockJS客户端库,用于与OpenFL应用程序和SockJS Websocket服务器进行实时远程处理。 该库允许OpenFL / Haxe应用程序连接到SockJS服务器。 它已经在iOS,Android,C ++(在Mac上进行...
稳定版UI Google网上论坛: : 用于Haxe OpenFL的宏驱动的ui引擎它旨在为开发人员提供自定义UI方面的尽可能多的自由。 支持的目标:cpp(iOS,Android,Blackberry,webOS,Windows,Linux,MacOS),Flash,html5,...
恐怖 关于 如果您打算使用 GPU 渲染器开发 2d 游戏,但您不知道哪种框架更适合您的目的,或者您仍然需要 Flash 支持。 Horror 是一个用于在 Haxe 中开发 2D 游戏的中级... 现在为 OpenFL/Lime/Snow 库实现并支持他的
haxegon:面向初学者的haxe编程库。 由OpenFL和Starling提供支持
要使用haxelib的最新版本: $ haxelib install minimalcomps要使用GitHub的最新开发成果,请执行以下操作: $ haxelib git minimalcomps https://github.com/jasonsturges/minimalcomps-openfl.git要将本地副本用作...
Apparat 基于 OpenFL 构建,还包含大量样板代码,可让您专注于真正重要的事情——您的游戏! Apparat 基于实体和组件,非常容易扩展和重用。 特征: 易于扩展的基于组件的框架 可嵌套实体,便于操作组 许多预制...
Gingee 的 GTween 库是使用 openfl 的 Haxe 的开源轻量级补间库。 随着时间的推移,它有助于快速轻松地创建具有大量参数的任何对象的丰富补间。 它可以与具有任何类型公共字段的任何类型的对象一起使用,其值为 ...
OpenFL-bitfive是/是OpenFL-html5的备用后端,旨在与画布驱动的应用程序配合使用,例如由或框架制成的应用程序。 它具有大部分来自原始自定义代码,其中包含几个类(最重要的是flash.net和ByteArray的数量)。 ...
SpriterHaxeEngine, 使用 Spriter Brashmonkey SCML的引擎进行 haxe SpriterHaxeEngine这个项目的点是提供一个兼容 Haxe 3和openfl的brashmonkey SCML渲染器的Spriter 。 ...