Actionscript 3和Haxe:在新的Flash项目中选择哪一个?

26

我正在规划一项新的Flash游戏项目,想知道哪种语言更适合使用?我已经对Actionscript 3有很深的理解,但还没有使用过Haxe,不过我已经阅读了语言参考文档,发现Haxe具有我最喜欢的其他语言(如C#和Ruby)的一些功能。

所以我的问题有两个部分:

1)Haxe能否与Flash组件(swc文件)进行互操作?例如,如果我使用Flash IDE来皮肤化某些控件,我可以导入这些控件并在Haxe中使用吗?

2)使用Haxe编译器是否有任何性能优势?或者有什么需要注意的问题?


1
我很想知道这个的进展。我曾经被haXe诱惑过几次。甚至有haXe/Neko的书籍。现在它可以编译成PHP和C++(以及Neko、ActionScript和JavaScript),我很快就会找到借口尝试一下。 - Nosredna
1
你还应该查看FPOD:http://code.google.com/p/fpod/ ...它提供了一些不错的额外功能...并加入邮件列表...有大量有用的信息/新闻和所有内容...还有帮助,当然... :D - back2dos
5个回答

14

1) 是的,也不是。从2.03版本开始,Haxe可以导出SWC文件。这意味着您可以使用Haxe编写代码,编译为SWC文件,然后在Flash中利用该SWC文件。目前,Haxe不支持SWC输入,只支持输出(尽管我相信他们正在开发这方面的功能)。

2) 是的,使用Haxe有一些好处——与Adobe的编译器不同,Haxe在编译过程中实际上进行了一些优化(这已经成为社区内长期存在的争议点)。此外,Haxe还利用了一些“隐藏”的新字节码,这些字节码是在Flash Player 10中出现的,目前既没有Flash也没有Flex使用,只有Adobe的Alchemy(它将C/C++源代码交叉编译成SWC文件)使用了这些字节码。

我知道的唯一一个需要注意的问题是,它有点像奇怪的ActionScript——有些东西不太一样,会让你感到困惑。尽管如此,拥有泛型和更快速的代码等功能,这点小代价还是值得的!


谢谢提供的信息。我肯定有兴趣在设计游戏时考虑泛型。尽管当前不支持读取SWC文件的情况令人失望,但我相信我可以解决这个问题。也许有本地的haXe库可以提供一些我一直在使用的Adobe AS3核心库的相同功能。 - Jason Miesionczek
1
你也可以在Haxe中使用用AS3编写的SWC文件。有一个编译器标志可以将它们用作外部库。 - TheHippo
2
一个swc文件就是一个带有其他数据的压缩过的SWF文件。在Haxe中使用swf文件是完全可能的。这里有一个例子:http://haxe.org/doc/flash/aswingas3?lang=en 和 http://haxe.org/doc/flash/flex?lang=en - tylermac

7
你可以在lib.haxe.org上找到很多有用的东西...(类似于ruby gems的haxelib也可以找到)...还有一个AS3到Haxe的转换器...所以可以尝试将corelib的相关部分翻译成Haxe...但是需要手动修复一些问题...
至于控件,只需查看Haxe GUI库...网上有几个这样的库...
现在来说说Haxe的优点: Haxe的好处之一是编译器速度更快,因此您不会花费很多时间进行编译...这真的很重要...
此外,Haxe是一种更丰富的语言,正如Branden已经隐含地表示的那样...我只想补充一点,您应该真正了解枚举类型...
尽管如此,Haxe最好的一点是,在编写服务器时,您可以使用相同的语言,而且像Haxe remoting这样的东西可以让您的生活变得超级简单...
AS3也有一些优点,但问题是,如果您尝试以与AS3相同的方式解决问题,则语言在运行时表现出奇怪的行为...如果保持严格和类型化,一切都会变得完美...
希望这可以帮助你... ;)
问候
back2dos

哇,感谢您提供有关Haxe Remoting的信息。我还发现了SPOD,它看起来是与Neko服务器一起使用的非常好的ORM。我想我刚刚确定了我的技术选择 :) - Jason Miesionczek

2
今天发布了新版 Haxe。新增了官方支持 C++ 目标平台。
因此,现在您可以使用相同的源代码来定位 ActionScript 和 C++。

2
NME改进了Haxe的跨平台支持,提供了一个简单易用的单一API,可用于Windows、Mac、Linux、Android、iOS、webOS、Flash和HTML5应用程序。
与MXMLC相比,Haxe编译器明显更快,特别是如果您习惯于从Flash IDE编译,而不是像FlashDevelop这样托管Flex编译器shell的IDE。正如前面提到的,还有许多新增的语言特性,如迭代器、typedefs、structs、宏等。
最好的是,由于您总是可以针对Flash,所以风险很小。 Haxe语言非常相似,如果您不介意支持单个平台,则可以针对所有Flash支持的功能。但是,只要坚持使用NME的跨平台API,您就可以在移动和桌面平台上体验到巨大的性能和功能优势,或者尝试使用HTML5支持。
最后,还有一个SWF库,可以让您从C ++访问SWF内容。当然,在Flash目标上始终可以做到这一点,但很快应该可以合理地在Flash IDE中定义接口,并将其用于移动或桌面C ++应用程序以及Flash / AIR目标。

1

1) 在编译时,您可以使用-swf-lib编译器参数包含一个swf库(而不是swc),如果您需要多个库,则可以使用swfmill工具合并多个库。在Haxe文档中有一个示例。

2) Branden已经完美回答了这个问题 :) 尽管我可能会补充一点,即在Flash应用程序中特别是“内联”可以提高性能的一个功能。由于Nicolas(Haxe的创建者)在内联函数上添加了更多的字节码优化。还有更多的这些优化计划


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接