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事件(每一次循环派发一次).

posted @ 2014-02-26 10:24  无名盗闪  阅读(250)  评论(0)    收藏  举报