StarlingManual:电影剪辑
来自Starling中文站
Starling里有一个非常轻量级的影片类:MovieClip。我们可以把这个类当做是可变贴图的Image。(因为它继承自Image,所以真的就是这样。)
我们推荐影片的所有帧都来自一个贴图集,并且尺寸都一样(因为如果不一样,会被变形到和第一帧一样的尺寸)。
以下是一个包含一个影片剪辑所有帧的贴图集。首先看包含影片帧坐标的xml。注意每一帧的名字都以"flight_"开始。
<TextureAtlas imagePath="atlas.png"> <SubTexture name="flight_00" x="0" y="284" width="166" height="164"/> <SubTexture name="flight_01" x="332" y="284" width="166" height="160"/> <SubTexture name="flight_02" x="166" y="284" width="166" height="150"/> <SubTexture name="flight_03" x="0" y="586" width="192" height="142"/> <!-- ... --> </TextureAtlas>
这是相应的贴图文件:
现在来创建MovieClip:
// 嵌入贴图集xml [Embed(source="atlas.xml", mimeType="application/octet-stream")] public static const AtlasXml:Class; // 嵌入贴图图片 [Embed(source="atlas.png")] public static const AtlasTexture:Class; // 创建贴图集 var texture:Texture = Texture.fromBitmap(new AtlasTexture()); var xml:XML = XML(new AtlasXml()); var atlas:TextureAtlas = new TextureAtlas(texture, xml); // 创建位图动画 var movie:MovieClip = new MovieClip(atlas.getTextures("flight_"), 10); movie.loop = false; // default: true addChild(movie); // 控制播放 movie.play(); movie.pause(); movie.stop(); // 注意:添加movie到juggler Starling.juggler.add(movie);
您有没有注意到我们是怎么使用贴图的前缀"flight_"来引用贴图的?这让我们可以创建混合贴图集,包含不同影片的帧和其他贴图,仅仅需要给影片的帧相同的前缀。
这样就使用这些贴图创建了帧频为10的影片。和所有影片一样,它必须使用juggler来控制,不要忘记这一点.
我们也可以使用自定义的持续时间来定义特定的帧,并且可以在某一帧显示时播放声音.
// 添加显示0.5s的另外一帧 movie.addFrame(anotherTexture, null, 0.5); // 在0帧添加声音 movie.setFrameSound(0, new EmbeddedSound()); // 添加包含特定声音和持续时间的帧 movie.addFrameAt(2, anotherTexture, anotherSound, 0.5);
另外一个值得注意的特性:一个MovieClip在播放完最后一帧后派发Event.COMPLETE事件(每一次循环派发一次).