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>

这是相应的贴图文件:

Media flying.png

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


翻译:杨旺(peter4431)

个人工具
名字空间

变换
操作
导航
Starling中文资料
Starling原创教程
论坛
友链
工具箱