将HTML5 Canvas WebGL游戏移植到Flash ActionScript 3.0



我在1月份为Mozilla game On 2010竞赛制作了一款HTML5 Canvas WebGL游戏(我知道这已经很晚了,我直到昨天才发布它)。现在我想把它移植到Flash ActionScript 3.0,作为大学作业。

我精通C/c++和Java等静态语言;以及Python和JavaScript等动态语言。然而,我不知道ActionScript,但由于它是ECMAScript的一个子集,它应该很容易理解。

我想学习在ActionScript 3.0中编程,这样我就可以将我的游戏移植到Flash中。更具体地说,我想了解更多关于:

  • ActionScript与浏览器和服务器端JavaScript有何不同?
  • OpenGL编程在ActionScript(包括加载纹理,着色器等)。
  • 如何在Flash中使用2D HTML5 Canvas(如API)创建HUD(在我的游戏中,我有2个画布,一个用于3D游戏,另一个用于平视显示)。
  • 支持向量和矩阵计算。
  • 如何在Flash中加载音频和精灵等资源。

如果你能给我提供一个链接,我可以从中了解更多关于这些主题的页面,我将不胜感激。更可取的是更直接的动手方法。

如果你能检查一下我的JavaScript源代码,并建议我解决这个问题的最佳方法,那就更有帮助了。

主游戏引擎和游戏本身的代码可以在我的Github存储库中找到

ActionScript和JavaScript在其核心是非常相似的。在某些方面,你可以把ActionScript看作是ECMAScript之上的一个健壮的库。有一些不同之处(即ActionScript喜欢认为自己是基于类的面向对象,而JavaScript是基于原型的),但如果你对其中一个感到舒服,那么你应该对另一个很自在。

ActionScript有一个基于类的继承系统,并支持接口(但是如果你想的话,你仍然可以做一些原型魔法,但不推荐)。它还支持强类型对象。

var object:MovieClip = new MovieClip();

这将把object变量强类型化为MovieClip类的实例。

如果你的游戏是非常3D密集,那么你会想看看新的Flash 11 Stage3D和Context3D类。这暴露了一个低级的GPU加速API,这在Flash 11之前是不可能的。你可以用Flash 10做一些有趣的3D东西,但你通常使用drawtriangle(),它不是硬件加速的。Flash 11目前处于测试阶段,但应该很快就会发布。Flex SDK的测试版可以让你针对Flash 11播放器进行编译。

也有相当多的3D库是建立在这些低级api之上的。如果你四处寻找,很容易找到。但我建议在深入研究3D库之前,先对ActionScript的工作原理有一个深入的了解。

无论你使用flash 11还是flash 10, flash中的HUD内容都很简单。对于"经典"flash,您需要熟悉他们在flash中使用的显示树概念。只要确保显示顺序是正确的,并且您的HUD DisplayObject将始终在您的渲染DisplayObject的"顶部"

对于Flash 11, StageVideoStage3D对象位于舞台的正上方,但位于所有附加到舞台上的普通Flash DisplayObjects的后面。所以在这种情况下,我会让Stage3D api照顾你所有繁重的渲染提升,并使用传统的显示堆栈为你的HUD元素。

你可能还想在Flash CS5.5上获取自己的Flash Builder。如果你是一个程序员(我假设你是,因为你在这里发帖),它不会让你的眼睛流血。FB是基于eclipse的,它相当不错,但并不完美。但是如果你获得了免费的Flex SDK,并且不介意使用命令行,你就可以开始快速而便宜地编译swfs。

另外,看看FlashDevelop。我有一段时间没有使用它了,因为它的内置分析器切换到FB,但它可能对你有用。

使用Flex SDK导入图像和音频非常简单。

[Embed(source="logo.gif")]
public var LogoBitmapData:Class;

,然后实例化类:

 var bitmapData:BitmapData = (new LogoBitmapData()) as BitmapData;

然后在任何你想要的地方使用它。

只是一个关于Flex的说明。Flex是一组建立在普通Flash API之上的UI库,Flex SDK包括编译MXML和ActionScript代码文件的库和工具。所以,尽管它听起来像你应该使用Flex SDK来编译Flex应用程序,你也可以使用它来编译直接的ActionScript代码。

有内置的类Vector3D和Matrix3D。

至于教程或参考资料,我真的没有任何可以提供的。我发现互联网上关于ActionScript编程的大部分信息都是相当偶然的(当你能找到一些不是由平面设计师写的东西时)。我想在这里翻一翻,看看你能不能找到一些对你有意义的东西。

显然,关于这方面我还有很多要讲的,但希望这能给你一个正确的方向。

欢迎来到AS3:)

@32bitkit打败了我的IDE信息,但我绝对推荐Flash Builder。如果你要做任何真正的AS3工作,它是一个真正的工具,值得花钱。

就实际教程而言,Senocular以编写一些最好的内容而闻名。他在这里有很多很棒的教程,但下面两个是AS3特别优秀的入门教程:

    这个教程很好,因为它解释了AS2(非常像javascript)和AS3之间的区别。忽略它是基于使用Flash"IDE"的事实。"
  • AS3 Introduction Without Learning Flex这篇文章很有用,因为它更多地介绍了语言本身,没有IDE或Flex框架的所有陷阱。它将帮助你理解语言本身。

如第二篇教程所示,基于as3的项目将继承flash.display.Sprite类。你可以在这里查看文档。也许这听起来很傻,但是你真的可以通过浏览AS3参考文档学到很多关于AS3的知识。Adobe在这方面做得很好。

在AS3中要注意的另一件事是如何处理事件。本教程解释EventDispatcher类如何作为事件管理的基础。您可以使用内置事件或分派您自己的事件。

HTH !

最新更新