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

时间:2011-09-23 17:28:52

标签: javascript actionscript-3 port webgl html5-canvas

我在1月为HTML5 Canvas WebGL game创建了一个Mozilla Game On 2010 competition(很晚,我知道 - 直到昨天才发布它)。现在我想把它移植到Flash ActionScript 3.0进行大学任务。

我非常精通C / C ++和Java等静态语言;和动态语言,如Python和JavaScript。但是我不知道ActionScript,但因为它是ECMAScript的一个子集,所以应该很容易理解。

我想学习ActionScript 3.0中的编程,以便我可以在Flash中移植我的游戏。更具体地说,我想了解更多:

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

如果您能为我提供指向我可以了解更多相关主题的页面的链接,我将不胜感激。更直接的实践方法更可取。

如果您使用JavaScript检查我的源代码并为我提出解决此问题的最佳方法,那将会更有帮助。

我可以在main game engine找到gameGithub repository本身的代码。

2 个答案:

答案 0 :(得分:2)

ActionScript和JavaScript的核心非常相似。在某些方面,您可以将ActionScript视为更像是在ECMAScript之上分层的强大库。有一些差异(即ActionScript喜欢将自己视为基于类的oop,而JavaScript是基于原型的),但如果你对它感到满意,那么你应该对另一个非常放心。

ActionScript有一个基于类的继承系统并支持接口(但如果你愿意,你仍然可以做一些原型魔术,但不建议这样做)。它还支持强类型对象。

var object:MovieClip = new MovieClip();

这将强烈键入object变量作为MovieClip类的实例。

如果您的游戏非常耗费3D,那么您需要查看新的Flash 11 Stage3DContext3D类。这些暴露了低级GPU加速API,在Flash 11无法实现之前。你可以使用Flash 10做有趣的3D内容,但是你通常使用的是drawTriangles(),它不是硬件加速的。 Flash 11目前处于测试阶段,但应该很快就会推出。 Flex SDK的测试版可以让你编译目标Flash 11播放器。

还有相当多的3D库构建在这些低级api之上。如果你为他们四处寻找,他们很容易找到。但我建议在深入了解3D库之前,先了解ActionScript的工作原理。

无论你使用Flash 11还是Flash 10,闪存中的HUD都很简单。对于“经典”闪存,你需要熟悉他们在flash中使用的display tree概念。只需确保显示顺序正确,并且您的HUD DisplayObject始终位于渲染的“顶部”DisplayObject

对于Flash 11,StageVideoStage3D个对象直接位于舞台上方,但位于连接到舞台的所有普通闪光灯DisplayObjects后面。因此,在这种情况下,我会让Stage3D api处理所有重型渲染,并使用传统的显示堆栈来处理HUD元素。

您可能还想通过Flash CS5.5抓住自己Flash Builder。如果你是一个程序员(我假设你是在这里发布的那个),它不会让你的眼睛流血试图编码。 FB基于日食,它相当不错但不完美。但是如果你抓住自己的免费Flex SDK,并且不介意使用命令行,你可以开始编写swfs非常快速和便宜(也就是免费)。

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

使用Flex SDK,

Importing images and audio非常简单。

[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代码。

Vector3DMatrix3D内置了类。

就教程或参考资料而言,我没有任何真正的提供。我发现互联网上关于ActionScript编程的大部分信息都非常受欢迎(当你能找到一些不是由平面设计师编写的东西时)。我会在here中挖掘一下,看看你是否能找到对你有用的东西。

显然我可以了解更多这方面的东西,但希望这会让你朝着正确的方向发展。

答案 1 :(得分:1)

欢迎来到AS3:)

@ 32bitkit打败了我的IDE信息,但我绝对推荐使用Flash Builder。如果你要做任何真正的AS3工作,这是一个真正的工具并且物有所值。

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

  • AS3 Introduction in Flash CS3本教程很好,因为它解释了AS2(非常类似JavaScript)和AS3之间的区别。忽略它基于使用Flash“IDE”的事实。
  • AS3 Introduction Without Learning Flex这个很有用,因为它更多地介绍了语言本身,没有IDE或Flex框架的所有特征。它将帮助您理解语言本身。

如第二篇教程所示,基于AS3的项目将继承自flash.display.Sprite类。您可以查看该here的文档。也许这听起来很愚蠢,但你只需浏览AS3 Reference docs就可以真实地了解AS3。 Adobe已经做得很好。

AS3需要注意的另一件事是如何处理事件。 This tutorial解释了EventDispatcher类如何作为事件管理的基础。您可以使用内置事件或发送自己的事件。

HTH!