65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 NME 构建您的第一个游戏

2012年12月20日

CPOL

4分钟阅读

viewsIcon

6907

如果您以前没有听说过,NME 是一个免费的开源框架,旨在为许多平台带来统一的功能集和原生性能,包括 BlackBerry® PlayBook™ 平板电脑和 BlackBerry® 10。

 

我知道在为 BlackBerry 平台开发游戏时有很多选择,但我希望与您分享我最喜欢的一个。如果您以前没有听说过,NME 是一个免费的开源框架,旨在为许多平台带来统一的功能集和原生性能,包括 BlackBerry® PlayBook™ 平板电脑和 BlackBerry® 10。

定义项目文件

构建 NME 项目时,首先要确保您有一个项目文件。这将告诉 NME 您的资源和源文件位于何处,以及应用程序名称、版本和作者等元数据。

与其他 BlackBerry 应用程序不同,您稍后不需要定义“bar-descriptor.xml”文件。NME 将根据 NME 项目文件中的值为您生成该文件。

<?xml version="1.0" encoding="utf-8"?>
<project>
<meta title="Asterisk Game" package="com.testing.asteriskgame" version="1.0.0" company="Joshua Granick" />
<app main="AsteriskGame" path="Export" />
	<window width="800" height="600" unless="mobile" />

<source path="Source" />
<haxelib name="nme" />
<haxelib name="actuate" />
	<assets path="Assets" rename="assets" exclude="icon-*.png" />
<icon path="Assets/icon-114.png" size="114" />
<icon path="Assets/icon-86.png" size="86" />
</project>

您可以在 这里 找到有关 NMML 格式的更多详细信息。

加载资源

NME 有一个 Assets 类,可以简化资源文件的加载。它接受一个路径,该路径基于您的项目的文件结构以及您在项目文件中包含的 <assets /> 节点。您可以使用 Assets 类同步加载位图数据、字节、字体引用、声音和纯文本。

如果需要异步加载资源,例如从远程服务器加载,您可以使用 NME 的 LoaderURLLoader 类,这超出了本文的范围。

创建位图

var bitmapData = Assets.getBitmapData ("assets/asterisk.png");
var bitmap = new Bitmap (bitmapData);
addChild (bitmap);

除非您在内存中创建新的位图,否则第一步是从文件或 Web 服务器加载现有的图像资源。在这个示例中,我使用的是一个名为“asterisk.png”的现有图形,我已将其包含在我的项目中。

完成此过程后,我将拥有位图的数据,在 NME 中由 BitmapData 类表示。使用 BitmapData 对象,我可以使用多种可用的渲染方法之一。最简单和最常见的方法是创建一个 Bitmap 并将其添加到“显示列表”中。在 NME 中,有一个对象树,这些对象会被自动渲染。通过将显示对象添加到已经是“显示列表”成员的父级,它也会被渲染。通过这种方式,我们可以决定何时可以渲染我们的 Bitmap

添加触摸交互

在屏幕上显示位图令人兴奋,但为了构建游戏,我们需要能够处理触摸交互。虽然 Bitmap 具有位置、大小、缩放和 alpha(透明度)等值,但 Bitmap 类无法处理触摸或鼠标交互。

添加此支持的最简单方法是将我们的位图放在一个 Sprite 中

var sprite = new Sprite ();
var bitmap = new Bitmap (Assets.getBitmapData ("assets/asterisk.png"));
sprite.addChild (bitmap);
addChild (sprite);

Sprite 类是 NME 开发中最常见的类之一。除了作为 DisplayObject(如 Bitmap 类)之外,一个 Sprite 实例还可以包含其他对象。Sprite 类还支持调度触摸和鼠标事件,这正是我们所需要的。

sprite.addEventListener (MouseEvent.MOUSE_DOWN, function (event) { bitmap.visible = false; });

添加事件侦听器可以响应对象上发生事件(例如 MouseEvent.MOUSE_DOWN 事件)。

NME 支持特定于触摸的 API,但大多数应用程序只需要侦听标准的鼠标事件即可。这些将适用于触摸屏以及传统的台式机和笔记本电脑系统,这使得您的项目更容易在多个外形尺寸上运行。

播放声音

var sound = Assets.getSound ("assets/fuzz.wav");
sound.play (); 

感谢 NME 的 Assets 类,加载 Sound 很容易。然后您可以调用 play 到您的声音。

在内部,NME 在 BlackBerry 上使用 SDL_mixer 来播放音频。这为许多文件格式提供了出色的支持,但也存在一些限制。SDL_mixer 同时支持一个流“音乐”通道和多个事件“声音”通道。NME 将尝试根据文件扩展名自动检测文件是“音乐”还是“声音”,但可以在您的 NMML 项目文件中手动控制这一点。

SDL_mixer 仅在“音乐”通道中支持 MP3,而其他格式(如 OGG 和 WAV)可用于“声音”。这是一个需要注意的限制,特别是如果您使用 MP3 文件。

下载示例

您可以下载“Asterisk Game”,这是一个使用这些特性制作简单“打地鼠”风格游戏的小样本。星号将出现在屏幕上,玩家点击星号使其消失,直到时间用完。分数基于玩家在它们自行消失之前能够点击的星号数量,并且根据星号的大小授予奖励分数——较小的星号价值更高。

如果您喜欢本教程并想了解更多关于 NME 的信息,请在评论中留言!

© . All rights reserved.