
Haxe
rockswang
万金油型开发者,编译器、服务器端、图形图像、游戏开发、移动开发都搞过。
目前在使用haXe语言开发多平台(Flash/Android/iOS/HTML5)娱乐应用和游戏。
展开
-
Haxe游戏引擎Flambe简介
Flambe是一个Haxe语言编写的游戏引擎,可以构建成Flash和HTML5两种目标平台,还可以通过AIR的支持,以原生应用的方式发布到Android和iOS上。Flambe官网: https://github.com/aduros/flambeFlambe文档: https://github.com/markknol/flambe-guide经过一段时间的验证,我发现Flambe是原创 2014-01-09 12:42:34 · 5346 阅读 · 0 评论 -
Haxe中的untyped关键字
对untyped关键字我的理解是,指示编译器对当前表达式不进行类型检查,一般情况下很少使用,但下面一种情况则可以使用untyped关键字来简化编码:Haxe是使用类型推断的强类型语言,因此下面的写法将导致编译错误:var a = { id: 1 }; // 定义一个Dynamic对象a.name = "Hello"; //这里编译错误因为Haxe通过类型推导认为a的类型是{ id:原创 2013-04-25 18:08:03 · 2414 阅读 · 3 评论 -
如何让NME开发的应用在Android上不全屏
默认情况下NME开发的Android应用是全屏的,也就是顶部的状态栏(电量、信号、通知等)亦被隐藏,对于游戏类一般用这种模式比较多,但是对于一些应用类,还是不应该把状态栏遮挡起来。遗憾的是,就我目前所知,此需求无法通过简单的修改nme项目的默认配置完成,而是需要修改nme的Android项目模板。具体在\lib\nme\3,5,3\templates\default\android\tem原创 2013-03-24 17:00:21 · 1624 阅读 · 0 评论 -
Haxe 3.0 RC版已经发布!
消息原文:https://groups.google.com/forum/?fromgroups=#!topic/haxelang/TQsp72Rio1E有关Haxe3的下载安装及新特性等相关信息,请见:http://haxe.org/manual/haxe3原创 2013-02-26 15:40:23 · 1135 阅读 · 1 评论 -
Haxe标准库中Json API的中文解析bug
目前的工作中需要在Haxe中解析Json文本,在haxelib中有两个Json相关的第三方库,不过都很久没更新了,从Haxe 2.1以后,Json API已经成为标准库中的一部分,具体即haxe.Json类。目前我只用到解析,用起来也很简单,调用Json.parse(jsonText: String)即可把Json文本解析成Dynamic对象。支持布尔、整数、浮点数、字符串、数组、复合对象等数原创 2013-02-19 04:09:06 · 1702 阅读 · 1 评论 -
让我们一起进入haXe的奇幻世界吧
haXe是什么?haXe是一种编程语言,官方网站在:http://haxe.org下面是官网对haXe的描述:IF YOU COULD ONLY LEARN ONE PROGRAMMING LANGUAGE, HAXE WOULD BE IT.IT'S UNIVERSAL. IT'S POWERFUL. IT'S EASY-TO-USE.那么haXe原创 2012-12-10 00:01:30 · 3520 阅读 · 3 评论 -
Haxe中保存位图为JPG格式
Haxe NME支持载入jpg和png格式的图像文件,如果想要把内存中的位图即BitmapData保存成文件,则可以使用haxelib中的hxformat库,这里简单介绍下如何保存位图为jpg格式。下面的代码可以把BitmapData编码成JPEG格式,并返回JPEG格式的字节数组。 public function encodeJpeg(img: BitmapData) : Byte原创 2013-02-05 14:34:24 · 1564 阅读 · 1 评论 -
haXe相关Q群,网站,电子书,站点收集(不断完善中)
讨论haXe请加Q群:30373020 电子书:haXe2语言参考手册: http://download.youkuaiyun.com/detail/rocks_lee/5013129haXe2新手指南: http://download.youkuaiyun.com/detail/rocks_lee/5013151精通haXe和neko: http://download.youkuaiyun.com/detail原创 2013-01-23 22:47:33 · 2990 阅读 · 1 评论 -
IntelliJ IDEA 12开发haXe NME应用配置指南
下载和安装 首先,IntelliJ IDEA 12目前并未正式发布,你需要下载EAP版IDEA 12:下载地址: http://confluence.jetbrains.net/display/IDEADEV/IDEA+12+EAPWindows安装包有大概200M,下来之后正常安装即可。安装后可以试用30天,当然你也可以那啥了,但是要注意,必须是适用于IDEA 12 Ulti原创 2013-01-02 01:54:01 · 4469 阅读 · 1 评论 -
推荐使用IntelliJ IDEA 12开发haXe应用
一直以来haXe缺少一个好的IDE,这点确实不方便,在现在注重快速开发的时代,一个现代IDE能带来太多的帮助。目前,官方推荐的是在Windows上使用FlashDevelop,在Mac上是MonoDevelop和Sublime Text2,我前一段一直都在用FlashDevelop,只能说可用而已,好用谈不上,比如:代码自动完成还是时有时无的,也无重构等功能,代码风格也无法自定义,不过还好可以原创 2013-01-02 00:28:57 · 4070 阅读 · 3 评论 -
NME3.5.3中的新工程文件格式
以前的NMML依然可用,但官方不保证以后继续支持。新的工程文件实际上就是一个标准的haXe源文件,它会被编译成neko字节码然后运行。这有个新工程的例程(原文http://pastie.org/5621885):class Project extends NMEProject { public function new () { super ();原创 2013-01-23 13:45:06 · 3806 阅读 · 1 评论 -
用haXe+NME实现水果忍者的刀光效果,支持多点触摸,Flash10, Android通用
前两天玩了玩水果忍者,感觉这种输入方式是非常适合多点触摸屏的,输入直观而且爽快感十足,于是就想到了如何使用haxe+NME实现刀光的效果,今天按照我的想法把效果实现了,感觉还是很逼真的。估计即使不是水果忍者中的真正算法,也差之不远了。下面介绍一下我的算法。算法的核心是采用NME中的Graphics.drawTriangles()来实现扭曲位图映射。对应在Flash中,这个API是从Flas原创 2012-12-10 00:12:08 · 2887 阅读 · 0 评论 -
haXe NME通过JNI调用Android
haXe中的JNI概念首先澄清一个概念问题,NME中的JNI接口和java中的含义并不相同,java中的JNI是java调用本地C/C++代码的标准接口,而haXe中的JNI则正好相反,是用haXe在Android目标平台调用java代码。当然,意义上也说得通,因为从haXe和Android目标的关系来说,Android自带的java运行库反而是native的嘛,呵呵。 nme.JNI原创 2012-12-18 23:21:22 · 2183 阅读 · 0 评论 -
开发自有/私有haxelib
基于以下几种场景,你很可能需要自己的haxelib* 希望为haxe开源社区做贡献,把自己的代码分享给所有人* 本地私有库,要被若干个项目共用,但基于目录复制的代码级重用很笨拙,而且难以维护下面就从我自己的实际需求出发,总结一下创建与分享一个haxelib库的步骤。首先,假定我的haxelib名称为myhaxelib,在自己工作空间创建myhaxelib目录在此目录下建原创 2013-05-22 16:54:06 · 2627 阅读 · 0 评论 -
Haxe3增强特性:宏 -- macros
官网英文原文:http://haxe.org/manual/macros其实从Haxe2.09开始,macros就已经很完善和强大了,不过那时候我对整个Haxe还不够熟悉,因此对macro这么高级的东西就更是敬而远之了。虽然目前为止还没有实际使用过macros,但这里试图结合官网文档说说自己的肤浅理解:在C和C++里,你是可以用宏(即#define xxxx)定义一些常量和内联原创 2013-05-29 16:11:51 · 2994 阅读 · 0 评论 -
在Haxe命令行应用中使用OpenFL库
最近尝试把之前用Haxe编写的小拼图游戏移植到Html5目标,因为原来有一些图片是在运行时使用像素运算动态产生的,在html5平台上从性能上考虑,决定把这部分运算放到服务器上,也就是用服务器来完成像素运算产生图像,浏览器端代码直接下载这张图片。这就有个问题,要把原来客户端的代码移植到服务器端。因为下列的客观条件:1. 服务器端Windows Server + Tomcat2. 原来的客原创 2013-12-30 00:44:59 · 3286 阅读 · 0 评论 -
Haxe UI框架StablexUI的使用备忘与心得(一)
这一节先来说说StablexUI的基本方面。安装与使用,在官方文档里Getting Started一章里写的很清楚,这里就不展开了,简单总结来说:* StablexUI依赖于actuate缓动库和OpenFL,因此在项目的nmml文件里不要忘了添加actuate, openfl, stablexui这三个haxelib* 开始载入任何一个xml界面文件之前,要首先调用UIBuilder原创 2013-09-13 14:20:04 · 4893 阅读 · 4 评论 -
Haxe UI框架StablexUI的使用备忘与心得(序)
最近在手上的项目开发中,从原来的使用Sprite全手写UI,开始逐步使用StablexUI,感觉还是相当不错的,强大、高效、轻量、灵活,非常适应我当前的实际需求。不过作为小种语言的一个小众第三方开源库,虽然StablexUI的官方文档还算比较全面,但实际使用中遇到的很多问题都是文档未涉及或语焉不详的,需要参考源代码进行分析,这里会使用系列博文的形式,把我的学习心得记载下来,一方面作为备忘供自己原创 2013-09-13 13:44:48 · 4223 阅读 · 0 评论 -
关于Haxe3新特性“内联构造方法”的解释
学习过C/C++的童鞋们应该了解inline即内联机制的意义,Haxe语言也很好的支持内联机制,让开发者可以自己在空间效率和时间效率上进行取舍。从Haxe3开始,构造方法也可以使用inline关键字声明为内联的,那么在实际环境中,Haxe编译器是如何处理构造方法内联的呢?Google圈子里有位大牛用一个实际的例子帮助大家进行理解,原帖地址在:https://groups.google.com/原创 2013-08-24 23:12:29 · 2514 阅读 · 2 评论 -
15分钟学会Haxe3
一个老外用代码+注释写的Haxe语法快速参考,虽说可能没有15分钟学会那么夸张,不过还是很有参考意义的。这里先把地址贴上,以后等这文档稳定了,翻译一下。https://github.com/jdonaldson/learnxinyminutes-docs/blob/master/haxe.html.markdown ===================================转载 2013-08-22 01:02:37 · 3565 阅读 · 1 评论 -
haXe语言中改进的switch...case语法
haXe语言的switch...case语法乍看上去和C++/Java等差不多,但实际上更严谨和易用。 无需break首先,haXe中的switch...case中无需break语句,这样就完全避免了因忘写break而造成运行期错误,我敢说这种错误几乎是每个类java语言程序员都犯过的吧。那么,这是不是意味着fall through技巧也没法使用了呢?也就是类似下面的写法, 即B和原创 2013-01-29 20:42:15 · 1324 阅读 · 0 评论 -
Haxe宏机制深入研究
上次看着官方文档,简单的脑补了一下Macro的运作机制,不过呢,纸上得来终觉浅,于是我决定实际编写一个基于宏的haxelib来边开发边学习边总结。这个库也是从实际需求出发,是一个国际化/本地化支持库,目标是在编译时实现字符串的外部化(externalize),生成xml供翻译使用,多语言字串的替换等等。下面说说我在此库开发中对宏运用的心得体会:原创 2013-06-19 17:22:13 · 3708 阅读 · 2 评论 -
选择一个NME游戏引擎
一篇挺全面的文章,介绍了NME的各个游戏引擎。http://www.gamefromscratch.com/post/2013/05/12/Choosing-a-Haxe-NME-game-engine.aspx转载 2013-07-17 21:45:21 · 2655 阅读 · 0 评论 -
Haxe2.10到Haxe3,NME到OpenFL的迁移备忘
终于决定正式向Haxe3和OpenFL迁移了,这期间也遇到不少问题,这里总结记录如下:首先是Haxe3环境* 因为还想保留Haxe 2.10的环境,因此没有使用官网的Haxe 3安装包,而是下载了zip包,手动解压。* Haxe 3现在依赖于Neko 2.0,原来Haxe 2.10用的Neko 1.83已经不适用了,因此还需要下载neko 2.0的安装包,手动解压;千万原创 2013-06-28 01:40:13 · 5901 阅读 · 1 评论 -
NME的GLSL支持情况
今天下载了NME3.5.5,测试了一下其中的HerokuShader这个例程。此例程中是利用NME的跨平台OpenGL支持,把glsl.heroku.com上的shader例程搬到了NME中,测试结果让我小小的激动了一下,居然可以在桌面端、移动端和浏览器端(HTML5 WebGL)同时跑起来,还相当的流畅!下面是windows版的一部分效果截图:原创 2013-06-05 14:42:55 · 2768 阅读 · 0 评论 -
Haxe 2 -> Haxe 3迁移指南
官网英文原文:http://haxe.org/manual/haxe3_migration混合类型数组症状: 编译错误 Arrays of mixed types are only allowed if the type is forced to Array解释:Haxe 2允许这样定义混合数组: [1, "foo"],编译器会自动推断其类型为Array。Haxe 3不允许如此定义,除翻译 2013-02-08 22:19:52 · 2143 阅读 · 0 评论 -
Haxe3新增特性:抽象类型 -- Abstract Types
官网文档链接在此:http://haxe.org/manual/abstracts还没有在项目中具体使用Haxe3,先参考英文文档说一下自己的理解:抽象类型主要有两种应用方式:1. 定义基本数值类型的隐式转换,如Int, Float, Void等,这种方式主要是Haxe核心数据部分在使用,一般开发中可能很少直接遇到;2. 定义一个不透明的外包装类型(显式定义,显式使用的新类型),用原创 2013-05-29 15:27:43 · 2698 阅读 · 0 评论 -
可选的Int参数在CPP目标上导致的编译错误
这是昨天开发中遇到的另外一个平台相关小问题。见代码如下:typedef Request = { var code: Int; var data: String; }public function request(?requestCode: Int = 1, ?requestData: String) { var requestList: Array = []; requestL原创 2012-12-14 13:05:43 · 701 阅读 · 0 评论 -
类中静态变量的初始化在Flash和CPP目标的小差异
原想写两个静态变量把当前设备的屏幕大小预先保存起来,这样比起在代码中写Lib.current.stage.stageWidth能少打几个字,于是,我就这么写了:class Util {public static inline var screenWidth: Int = Lib.current.stage.stageWidth;public static inline var scre原创 2012-12-14 12:25:17 · 630 阅读 · 0 评论 -
haXe中使用callback关键字"特化"一个函数从而改变其参数列表
haXe中有个很方便的特性,就是可以用callback关键字来“特化”一个函数。具体就是针对一个多个参数的函数调用,可以指定1至若干个默认参数的值,而返回一个需求参数数量小于原函数的定制化的新函数。看上去很晕吧,但是有时候很方便,比如我最近遇到的一个场景,AS3中的事件监听器的原型必须是Dynamic -> Void,而我希望用一个函数处理所有的鼠标事件,但是根据不同事件类型对函数进行定制原创 2012-12-13 02:33:24 · 863 阅读 · 0 评论 -
haXe中对BitmapData进行批量像素级运算
NME中大部分的位图滤镜(flash.filters.*)都未实现,所以有些特效不得不自己编写代码来进行批量像素处理。用getPixel32()和setPixel32()当然是最简单的,但效率很低。因此这里使用getPixels()把批量像素复制到字节数组,进行完运算,再用setPixels()覆盖回到位图。下面的代码目的是根据一张掩码位图mask对原始位图bmp逐像素进行浮雕化处理,也就原创 2012-12-08 23:39:20 · 1099 阅读 · 0 评论 -
haXe CFFI介绍
官方文档:http://haxe.org/doc/cpp/ffiCFFI是haXe和原生CPP代码交互的标准方案,就像JNI相对于java。因为NME的iOS/Android部分都基于CPP,因此如果希望自己扩展haXe,理解CFFI很有必要。原创 2012-12-08 23:37:14 · 862 阅读 · 0 评论 -
如何创建NME本地扩展
最近正研究NME如何调用Android/iOS本地库,这里先把老外大牛的文章链接贴一下,等亲自验证了再补充我自己的心得。http://www.joshuagranick.com/blog/2012/03/20/how-to-create-an-nme-extension/另外这里有老外原文中引用的例程源码:http://code.google.com/p/nme-extension原创 2012-12-08 23:36:36 · 684 阅读 · 0 评论 -
haXe2.1到haXe3的变化
见官方文档:http://haxe.org/manual/haxe3 捡几个影响比较大的小结如下:* Zip API现在被移到haxe.zip包,变成完全跨平台的了* 平台相关的文件操作API被移到sys包中,变成跨平台的了* 属性的getter和setter命名被标准化了,但仍然向下兼容,见下面例程:class Foo { public var x(get,se翻译 2012-12-08 23:34:55 · 834 阅读 · 0 评论 -
NME使用Android设备自带中文字体
前面写了篇关于中文显示的文章,地址在:http://hi.baidu.com/rockswang/item/7a6e5c283eb1190f42634acb在Android平台上,上文给出的解决方案是应用自带中文字体。但是这里有个问题就是中文字体文件普遍太大了,比如我找的仿宋字体算小的了,也有4M左右,而微软雅黑居然要14M,这样apk安装包就很大了。另外,经测试我的华为C8500低端手机原创 2012-12-08 23:33:03 · 1379 阅读 · 0 评论 -
NME中不同渲染方式的性能测试
原文链接:http://www.joshuagranick.com/blog/2012/10/04/nme-rendering-methods-benchmarked/作者的测试是在一台Mac pro笔记本上分别分别针对本地目标和flash目标进行测试。其分数是在稳定的60帧/秒速率下,同屏显示的精灵(bunnies)数量,数量越多性能越好。本地目标采用GPU加速,而Flash则是软件原创 2012-12-08 23:17:25 · 1484 阅读 · 0 评论 -
NME Android目标中文输入问题完美解决!
前面写了两篇文章提到了在haXe+NME中解析和显示中文的问题,但是经验证,在Android/Windows等目标平台上(iOS目前没条件测试),中文输入还是不行,TextField似乎仅接受Ascii字符。今天在群中看到有位大侠找到了老外写的一篇文章解决了这个问题:http://www.haxenme.org/community/forums/general-discussion/patch原创 2012-12-09 00:13:32 · 2001 阅读 · 1 评论 -
haXe开发备忘:访问本地文件
试了下如何用haXe访问本地文件系统。* 在Android/windows中,可以用sys.FileSystem和sys.io.File来读写本地目录与文件* 而URLRequest则用来访问远程站点,类似file:///sdcard/xxx/xxx.jpg这样的本地文件URL目前看来是不能识别的* 看到NME坛子里讨论好像URLRequest接受/sdcard/myfolder/fi原创 2012-12-09 00:12:47 · 1324 阅读 · 2 评论 -
关于haXe NME中的事件机制
因为NME实际就是C++版本的AS3运行库,因此可直接参考AS3中的事件机制。下面是两篇比较系统的中文文章:AS3中的事件机制 http://hi.baidu.com/iammutex/item/553aab20b4caeb11087508f4AS3事件机制浅析 http://www.cnblogs.com/psj2002/archive/2012/05/14/2499592.html原创 2012-12-09 00:02:53 · 1152 阅读 · 0 评论 -
【转载】NME不同平台上读写文件的处理
原文:http://www.idearadar.org/?p=71NME’s Pitfalls and workarounds(1): Use SharedObject over ByteArray IO 在nme 3.4.3中,它的ByteArray IO与filesystem相关类在不同target中表现不同,如下段代码所示,你需要用条件编译来处理它: loader.d转载 2012-12-08 23:35:53 · 717 阅读 · 0 评论