NME框架入门指南

NME是一个免费且开源的框架,它旨在为多个平台提供统一的功能集和原生性能,包括BlackBerry PlayBook平板电脑和BlackBerry 10。

定义项目文件

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

与其他BlackBerry应用程序不同,不需要定义一个"bar-descriptor.xml"文件。NME会根据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类来同步加载位图数据、字节、字体引用、声音和纯文本。

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

创建位图

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

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

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

添加触摸交互

将位图显示在屏幕上是令人兴奋的,但为了构建一个游戏,需要能够处理触摸交互。虽然Bitmap有位置、大小、缩放和透明度等值,但Bitmap类不能处理触摸或鼠标交互。

添加这种支持的最简单方法是将位图放在一个Sprite中:

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

Sprite类是NME开发中最常用的类之一。除了像Bitmap类一样是一个DisplayObject,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文件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485