Starling之影片剪辑
Starling包含一个非常轻量的影片类:MovieClip。你可以猜想这个类像一个不断更换纹理的图片。(因为它扩展自图片,它确实是这样的)。
建议影片剪辑所有的帧都来自一个纹理图集,并且它们都具有相同的大小(如果没有的话,它们将被拉伸到与第一帧相同的尺寸)。
这是一个简单的纹理图集,它包含了影片剪辑所有的帧。首先,看看帧坐标的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>
这是对应的纹理:
现在让我们来创建影片剪辑:
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 // 重要的是:添加影片到juggler
25 Starling.juggler.add(movie);
你有没有注意我们如何通过它们的前缀"flight_"从图集中引用纹理?这允许你创建一个包含不同影片剪辑和其它纹理的混合图集。只要给所有帧相同的前缀。
已经用这些纹理创建了影片以及一个10帧每秒的播放速率。像所有的动画一样,它已经传给了juggler--不要忘了这一点!
你也可以对某些帧使用自定义持续时间,每当某帧显示时开始播放声音。
1 // 添加另一帧,它只显示半秒
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);
值得一提的另一个特征是:每当影片剪辑显示它的最后一帧时它分发Event.COMPLETE事件(每循环一次)。
原文链接:Starling之影片剪辑