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文件。