远离GameMaker —第3部分:拥抱StageXL

在上一篇文章中,我谈到了为什么我选择Dart而不是JavaScript。 在本文中,我想探讨我选择的框架StageXL。

StageXL是一个框架,它源于寻找Adobe Flash的替代品。 由于Flash无法在移动设备上运行,并且HTML5现在可以在没有插件的情况下在浏览器中运行游戏,因此需要在浏览器中本机运行的游戏框架。 StageXL试图匹配Flash中相同的方法和思想,以便对旧方法感到满意的开发人员应该能够非常轻松地适应Dart和框架。

好吧,我不是来自Flash背景。 我已经使用GameMaker完成了大部分游戏开发工作,因此,与以前的经历相匹配的工作几乎全丢了。 那么,为什么选择StageXL? 到目前为止,它似乎是我选择的语言中可用的最成熟的游戏框架。 因此,从某种意义上说,我一直坚持下去。 但是我认为这是积极的,而不是消极的,因为我不必在多个框架中进行原型设计来找出最适合我的框架。

由于我不知道如何开始,因此我举了一个例子。 由于我决定将纸牌游戏移植过来,因此我选择了“内存”示例,因为它使用了纸牌。 我撕碎了所有花哨的翻转和倾斜的角度,将其简化为一堆纸牌。 插入并显示扑克牌后,便附加了事件以进行拖放。 有效。 现在是将游戏从一种框架设计转换为另一种框架的困难部分。

GameMaker:Studio(GMS)将游戏分为独立的部分,最重要的是房间。 您看到的每个屏幕都是GMS中的一个房间。 很可能只有一个房间,但有些游戏却有数千个房间。 房间是一个截然不同的作品,可以被认为是一个“水平”。 在我的游戏Slam中,我使用了5个房间:1个用于游戏本身,另外4个“菜单”房间用于容纳主菜单,计算机选择,存储和帮助屏幕。

StageXL没有房间。 它有一个舞台。 如果舞台上有孩子,他们会被吸引。 如果他们不是孩子,他们就不会。 我决定模仿GMS,以便快速过渡游戏。 因此,我为房间创建了DisplayObjectContainers:主菜单,计算机选择,游戏等。

GMS使用“对象”定义用户交互。 这些不是“面向对象编程”意义上的对象,而是它们只是交互事件的集合。 他们可以附加一个精灵。 他们可以响应用户事件。 对象是通过以下两种方式之一创建的:要么通过使用编辑器放置在房间中,要么以编程方式使用函数。 但是无论哪种情况,如果您的游戏中没有对象,那么用户将非常无聊。

在StageXL中,事情要复杂一些。 基本的抽象类InteractiveObject定义了用户交互。 Sprite类是我经常使用的具体版本。 我的意思是很多 。 由于是纸牌游戏,所以最简单的交互式对象是纸牌。 我使Card类扩展(继承自Sprite),因此它可以具有图像(卡面),同时还可以访问诸如拖动之类的用户交互。 我在转换后的“内存”工作中实现了这些功能,然后我做了一个非常基本的游戏:“一次可以移动多少张卡片?”(结果是5张)。

GMS具有用于定义交互和事件的拖放界面,但我从未使用过。 它确实只对那些刚接触编程的人有用。 但是由于对象是唯一的交互方式,并且事件处理程序都在拖放界面中,所以我所有的事件都是“运行这段代码”的变体。 因此,当用户点击甲板以补充其手部时,我得到以下信息:

它所做的一个单一事件就是运行一段代码。 该代码重新填充了玩家的手。 我所有的对象看起来都是这样。 有些具有多个事件处理程序,它们都“执行一段代码”。 这很烦人。

相反,在Dart中,我有一个Player对象。 该玩家有两个子对象:一只手和一个抽奖牌。 我用“孩子”来表示“属于我并且可以控制的对象”。 播放器添加了一个处理程序,以便在用户点击以补充其手时进行监听。 代码如下:

  var clickHandler =(_){ 
如果(_drawDeck._disabled){
返回;
}
refillHand();
};
  this._drawDeck.onMouseClick.listen(clickHandler); 
this._drawDeck.onTouchTap.listen(clickHandler);

这样,代码很容易推理和查找正在发生的事情。 通常,我在Dart中的所有对象仅了解自己和他们的孩子。

我必须研究的使用GMS的一部分是如何最好地进行补间。 补间动画是补间动画。 在Slam中,我使用补间动画将卡片设置为不同的位置。 例如,计算机播放器检查手中的每张卡是否有移动。 通过将卡向下移动几个像素然后将其返回到手,可以从视觉上看出这一点。 我使用补间库,而不必手动计算应该绘制卡片的每个帧。 这个库很棒,可以按预期工作。

在StageXL中,有一个名为“ Juggler”的内置补间库。 由于它是内置的,因此易于使用和扩展。 通常,一旦阅读了文档,在两个平台上使补间都能按需工作很容易。 StageXL具有内置功能,因此具有优势。

一旦弄清了这些关键事项,大部分工作就是将代码功能复制到StageXL。 在大约4星期的30个小时内,我能够在Dart和StageXL中构建一个完全正常的版本。

在下一部分中,我将讨论如何计划使用Cordova / Phonegap在手机上实际运行它。