终于决定正式向Haxe3和OpenFL迁移了,这期间也遇到不少问题,这里总结记录如下:

首先是Haxe3环境

* 因为还想保留Haxe 2.10的环境,因此没有使用官网的Haxe 3安装包,而是下载了zip包,手动解压。

* Haxe 3现在依赖于Neko 2.0,原来Haxe 2.10用的Neko 1.83已经不适用了,因此还需要下载neko 2.0的安装包,手动解压;千万不要以为neko没有用,实际上Haxe和OpenFL的构建工具链都是基于neko虚拟机的。

* 修改Path,把Haxe 3和Neko 2的可执行文件路径添加进去。

* 打开一个命令行窗口,执行haxe命令和haxelib命令,确认都是3.0版本。

* 执行haxelib setup命令,设置第三方库的默认仓库路径,如果不修改的话,有可能还会使用原来haxe 2.10的仓库路径,而导致混乱。

* 如果你需要本地开发库(即用haxelib dev lib_name lib_path设置的本地库)的话,那么需要升级一下haxelib,因为官网发布版内的haxelib有一个有关dev库设定的bug,会在dev版lib目录后添加'/',导致无法构建。需要升级haxelib,具体步骤为在命令行窗口内执行以下两个命令:

  haxelib selfupdate
haxe update.hxml

安装OpenFL

* 执行haxelib install openfl即可下载

* 执行haxelib run openfl setup,openfl会自动下载其依赖库,包括openfl-tools, openfl-html5, openfl-native, openfl-compatibility, openfl-samples, hxcpp,这可能需要一段时间,因为有几个库很大,另外国内访问haxelib服务器也不快,我是翻墙下载的。

* 分别执行haxelib run openfl setup windows, haxelib run openfl setup android来设置Windows和Android的环境,这些和以前NME时没有区别,因此我这里基本上一路回车跳过即可,唯一一点更新在于,原来我用的NME3.4使用的是Android NDK r7c,这次升级到了Android NDK r8c。

项目文件的修改

原来的nmml文件,现在openfl项目里改后缀为xml了,不过格式基本上无太大变化。

把原来的<haxelib name="nme"/> 改成以下的两行即可,那个openfl-compatibility就是为了确保nme项目到openfl的兼容性的:

    <haxelib name="openfl" />
<haxelib name="openfl-compatibility" />

<ndll>命令现在好像没用了,可以删除。

Android原生部分的第三方jar包目录和资源目录(即android项目下的libs, res, assets目录),我原来是用template命令来复制的,现在有问题,无法正常复制目录;我已经给openfl-tools项目提了issue。单个模板文件的复制没有问题,仍然工作正常。

目前的解决方案是手动复制过来,反正只要不clean的话,这个工作也只要做一次就好。

源码的修改

* Hash和IntHash替换成Map

Haxe3中去掉了Hash和IntHash类,换成了更通用的Map类,可以用任意对象作为键。不过麻烦的就是Hash和IntHash都是大量使用的基本数据结构,因此对老项目的影响比较大。我的做法是在一个被广泛导入的类中加入了如下定义:

#if haxe3
typedef Hash<T> = Map<String, T>;
typedef IntHash<T> = Map<Int, T>;
#end

其它零星的未导入该类的就加入私有的类型定义。

* inline static var现在不能使用表达式赋值了,而只能限于常量。

这个影响也比较广泛,因为Haxe中的inline static var基本上相当于其它语言中的常量定义。官网给出的解释是内联的表达式可能会出现不可预料的结果,方案则是换成内敛的函数调用,不过我的解决方案更简单:能用常量的改用常量,不能用的改成普通的静态成员即可,普通静态成员依然是可以用表达式赋初值的。

* Haxe中callback关键字被去掉了,取而代之的是更灵活的function.bind(),具体可以参见官网的移植指南。

* Haxe3中基于模式匹配的switch语法已经强到爆棚,不过和Haxe2有些地方是不兼容的。比如:

现在似乎必须有"default:"或"case _:"分支了;

switch (true) { case a > 5: ...; case a <= 5: ...; } 这种方式似乎不行了,需要用if ... else if ... else ... 来代替。

* haxe.FastList现在被haxe.ds.GenericStack取代,用法一致。

* haxe.BaseCode现在挪到haxe.crypto.BaseCode。

* 现在Haxe3不能自动推断出混合类型的数组,必须显式的声明为Array<Dynamic>。比如:

  var a = [ 3, "hello" ];             =========>>>>  var a: Array<Dynamic> = [ 3, "hello" ];

* 因为Haxe3兼容的actuate库和spritesheet库都是新版本,这个新版本的包名大大简化了,而我的项目恰恰使用了这两个库的老版本,因此凡是引用这两个库的类都需要修改。

Haxe2.10到Haxe3,NME到OpenFL的迁移备忘的更多相关文章

  1. t420 win7 硬盘安装ubuntu 10.04 LTS 备忘

    http://zhangwen.sinaapp.com/?p=5 t420 win7 硬盘安装ubuntu 10.04 LTS 备忘 发表于 2011 年 10 月 25 日 对ubuntu的新版没有 ...

  2. Vmware 10安装MAC OS X 10.9备忘

    下载准备     Vmware 10     unlock-all-v120.zip (用以支持新建MAC)     MAC OS X 10.9 VMWARE.rar 已经安装完成的MAC系统虚拟机镜 ...

  3. 从 10.x 到 ArcGIS Pro 的 Python 迁移

    与 ArcGIS Pro 结合使用 Python 的方式与包括 ArcGIS Desktop.ArcGIS Server 以及 ArcGIS Engine 在内的其他 ArcGIS 产品不同. 地理处 ...

  4. Windows 10正式版官方原版镜像!(备忘)

    本文搜集整理微软官方发布的Windows 10正式版镜像下载链接,从RTM原始正式版开始,按照时间倒序排列,即越往上的越新. 注意:以下资源均来自于微软官方原版,ed2k可视为P2P下载链接.下载完成 ...

  5. 引擎设计跟踪(九.10) Max插件更新,地形问题备忘

    最近没有大的更新. 最近本来要做max的骨骼/动画导出, 看导出插件代码的时候, 突然想起之前tagent space导出的疑问, 于是确认了一下. http://www.cnblogs.com/cr ...

  6. Windows Azure 社区新闻综述(#74 版)

    欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure 的社区推动新闻.内容和对话.以下是本周的亮点. 文章.视频和博客文章 ·   Azure CDN:吸取的宝贵经验(10 月 ...

  7. HaXe以及OpenFL部署

    HaXe以及OpenFL部署 Haxe是一种跨平台的编程语言,本文并未HAXE的教程,只是针对OPENFL以及HAXE的部署教程.HAXE的语法非常类似AS3,由于国内部署HAXE艰难,经常下载到一半 ...

  8. 10. 星际争霸之php设计模式--原型模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  9. centos6.5+jexus5.6.3+mono 3.10实践,让asp.net在linux上飞一会儿

    备忘,这是给自己看的,用ubuntu server装mono 3.10老是卡在了编译libgdiplus上面,从来就没成功过,郁闷啊,零零散散搞了好几天,作罢.后来试了OpenSUSE 11很容易搞好 ...

随机推荐

  1. 编程算法 - 二叉树的深度 代码(C)

    二叉树的深度 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一棵二叉树的根节点, 求该树的深度. 依次选择最深的左右子树, 然后递归加1. ...

  2. 简洁vim配置方案Janus(1)

    最近不想在编辑器上花太多的精力,所以找到个不错的解决方案. 在不懂vim配置的前提下也能用的很开心. 1,下载安装Janus(https://github.com/carlhuda/janus) 安装 ...

  3. 图文详解ReSharper 8.1功能变化

    ReSharper 8.1版本已经发布有段时间了,被广大开发者购买和试用,今天小编就ReSharper 8.1功能变化就行详细的解说. 支持TypeScript 突出了重构(重命名,引入变量).导航. ...

  4. onsite

    领英.脸书面试以及onsite小记(北美)   最近两个月忙于找工作,投了不少简历,比较牛逼的公司里面就领英和脸书理我了,都是同学朋友内推的功劳.没想到自己也比较争气,一路杀到了最后一轮,拿到了两家的 ...

  5. html postMessage 创建聊天应用

    应用说明: 这个例子演示如何在门户页面以iframe方式嵌入第三方插件,示例中使用了一个来域名下的应用部件,门户页面通过postMessage来通信.iframe中的聊天部件通过父页面标题内容的闪烁来 ...

  6. leetcode[96] Binary Tree Inorder Traversal

    给定树根root.实现中序遍历,也就是左根右. 用递归的话,很简单,左边的返回值加上root的再加上右边的就行. 我自己写的有点挫: /** * Definition for binary tree ...

  7. CodeSmith开发系列资料总结

    CodeSmith开发系列资料总结 最近跟同事在研究CodeSmith,感觉中文文档是少之又少,所以我们自己写(翻译)了一些文档,总结如下,希望对使用CodeSmith的朋友有所帮助: “努力学习的熊 ...

  8. james+javamail入门

    James+Javamail构建邮件服务(一) 本文描述如何使用James搭建具备一定邮件过滤.邮件操作功能的邮件服务器,以及使用Javamail实现对James服务器邮件的收发功能. 1关于Jame ...

  9. .net图片裁剪抠图之性能优化

    //.net图片裁剪抠图:1.将不坐标点存入GraphicsPath中:GraphicsPath gPath = new GraphicsPath();2. 通常我们判断一个坐标点是否在闭合区间内通采 ...

  10. 调式WP程序报0x80131500错误的解决办法

    在虚拟机上安装了win8系统和VS2013,但是在允许第一个WP程序时,居然报0x80131500错误信息,经查询原来是VS2013需更新的问题,如果你用的是VS2012,但是又系统升级到了win8. ...