Starling电影剪辑-动画的产生
Starling里有一个非常轻量级的影片类:MovieClip。我们可以把这个类当做是可变贴图的Image。(因为它继承自Image,所以真的就是这样。)
我们推荐影片的所有帧都来自一个贴图集,并且尺寸都一样(因为如果不一样,会被变形到和第一帧一样的尺寸)。
以下是一个包含一个影片剪辑所有帧的贴图集。首先看包含影片帧坐标的xml。注意每一帧的名字都以"flight_"开始。
1 <TextureAtlas imagePath="atlas.png"> 2 <SubTexture name="flight_00" x="0" y="284" width="166" height="164"/> 3 <SubTexture name="flight_01" x="332" y="284" width="166" height="160"/> 4 <SubTexture name="flight_02" x="166" y="284" width="166" height="150"/> 5 <SubTexture name="flight_03" x="0" y="586" width="192" height="142"/> 6 <!-- ... --> 7 </TextureAtlas>
这是相应的贴图文件:

现在来创建MovieClip:
1 // 嵌入贴图集xml 2 [Embed(source="atlas.xml", mimeType="application/octet-stream")] 3 public static const AtlasXml:Class; 4 5 // 嵌入贴图图片 6 [Embed(source="atlas.png")] 7 public static const AtlasTexture:Class; 8 9 // 创建贴图集 10 var texture:Texture = Texture.fromBitmap(new AtlasTexture()); 11 var xml:XML = XML(new AtlasXml()); 12 var atlas:TextureAtlas = new TextureAtlas(texture, xml); 13 14 // 创建位图动画 15 var movie:MovieClip = new MovieClip(atlas.getTextures("flight_"), 10); 16 movie.loop = false; // default: true 17 addChild(movie); 18 19 // 控制播放 20 movie.play(); 21 movie.pause(); 22 movie.stop(); 23 24 // 注意:添加movie到juggler 25 Starling.juggler.add(movie);
您有没有注意到我们是怎么使用贴图的前缀"flight_"来引用贴图的?这让我们可以创建混合贴图集,包含不同影片的帧和其他贴图,仅仅需要给影片的帧相同的前缀。
这样就使用这些贴图创建了帧频为10的影片。和所有影片一样,它必须使用juggler来控制,不要忘记这一点.
我们也可以使用自定义的持续时间来定义特定的帧,并且可以在某一帧显示时播放声音.
1 // 添加显示0.5s的另外一帧 2 movie.addFrame(anotherTexture, null, 0.5); 3 4 // 在0帧添加声音 5 movie.setFrameSound(0, new EmbeddedSound()); 6 7 // 添加包含特定声音和持续时间的帧 8 movie.addFrameAt(2, anotherTexture, anotherSound, 0.5);
另外一个值得注意的特性:一个MovieClip在播放完最后一帧后派发Event.COMPLETE事件(每一次循环派发一次).

浙公网安备 33010602011771号