就如同大部分游戏一样,我们在做游戏的时候,少不了需要Image、MovieClipe、Sound、Font这些资源的引入和使用,Starling因为是基于Stage3D的,所以他对于资源的实现上有一些不同,用到了很多的3D方面的知识才好理解一些。其实Starling只是通过3D的纹理绘制,来实现图片加载的,所以纹理Texture成为了必须要记住的东西。
通过上一次的了解,我们知道了默认包中有很多资源管理,再次就以Assets.as为例
这个类里面主要的资源就是welcome界面的背景,游戏中背景,以及各个元素的Spritesheet.png以及他的配置文件。在看游戏的代码之前,先总结一下Image、MovieClipe等这些资源是如何使用的。
1、Image的使用
var image:Image = new Image(Texture.fromBitmap(new Pic())); this.addChild(image);
我们只需要通过[Embed(source=“res/*.png”)] var Pic:Class就可以了
2、MovieClipe的使用
MovieClipe的资源总共有两个一个是.png文件,还有一个是xml文件。
这些文件的制作时通过TexturePackerGUI这个工具来制作,Starling官网上可以找到工具的下载,虽然和Image有些类似,但是xml的引入还是有一些不同。
[Embed(source="../media/graphics/mySpritesheet.png")] public static const AtlasTextureGame:Class; [Embed(source="../media/graphics/mySpritesheet.xml", mimeType="application/octet-stream")] public static const AtlasXmlGame:Class;
我们在使用的时候在创建MovieClipe的方法如下:
var texture:Texture = Texture.fromBitmap(new AtlasTextureGame()); var xml:XML = XML(new AtlasXmlGame()); TextureAtlas ta = new TextureAtlas(texture,xml); MovieClipe mc = new MovieClipe(ta.getTextures("fly_"));
这里ta.getTextures(“fly_”)中传入的字符串其实是得和xml当中相匹配,并且建议将一个MovieClipe的每张素材用一个数组命名的规则。
最后我们再来看《Hungry Hero》的资源管理代码的总结,其实是定义了两个静态方法,分别获取TextureAtlas或者Texture,用于我们以后的操作。并且使用了Dictionary这个类来做索引匹配,类似于Java中的HashMap,但是原理并不同。
代码如下:
public static function getAtlas():TextureAtlas { if (gameTextureAtlas == null) { var texture:Texture = getTexture("AtlasTextureGame"); var xml:XML = XML(new AtlasXmlGame()); gameTextureAtlas=new TextureAtlas(texture, xml); } return gameTextureAtlas; } public static function getTexture(name:String):Texture { if (gameTextures[name] == undefined) { var bitmap:Bitmap = new Assets[name](); gameTextures[name]=Texture.fromBitmap(bitmap); } return gameTextures[name]; }
AS可以通过 new Assets[name](),这个是通过name值,确定创建Assets的成员变脸定义的类的对象。
还是很好理解的