一起來玩鳥 Starling Framework(7)MovieClip
承上一篇,我們接著來講最後一個IAnimatable類別,MovieClip。Starling的MovieClip跟native的MovieClip不太一樣,它只能接收一個Vector.<Texture>,來指定每個frame的貼圖,而不能像native一樣當DisplayObjectContainer,加入一堆東西。不過透過一些工具,我們可以把native做好的MovieClip,輸出成一張Sprite sheet,以及一個XML檔,再將這張圖片與XML匯入Starling產生一個TextureAtlas,最後由這個TextureAtlas轉出Vector.<Texture>給MovieClip使用。
先來介紹一下產生Sprite sheet的工具,TexturePacker。這套軟體有Windows版與Mac版,可以輸出給很多framework使用。我們可以先下載Essential版來試用。下載安裝後,我們打開Flash Professional,新增一個movieClip.fla,隨便做一段動畫,然後發布movieClip.swf。接著我們打開TexturePacker,把movieClip.swf直接拖曳到面板的右邊區塊,或按上面的"Add Sprites"按鈕。在介面中間的區塊,就可以看到TexturePacker幫我們把movieClip.swf時間軸的動畫排成一張Sprite sheet。左邊的設定面版,我們只要設定Data Format為Sparrow,勾選Autosize與Allow free sizes大概就可以了。設定選項的位置如下圖:

接著按下上方的"Publish"按鈕,這時候會先跳出一個視窗,告訴我們用了一些功能是需要購買License才能正常使用,否則會隨機將兩張圖貼上奇怪的字。這邊我們先做測試,所以直接按Continue。接著會讓我們分別儲存Data file(XML)以及Texture file(PNG)。我們分別存成movieClip.xml與movieClip.png。
我們可以打開movieClip.xml看一下,root node為TextureAtlas,裡面有很多SubTexture,name應該都為"movieClip.swf/00xx",等等我們會需要透過這個name的命名方式把它們取出來。
接下來就可以進入程式的部分了,先把程式碼貼出來:
publicclassGame7extendsSprite
{
privatevar _container:Sprite;
[Embed(source ="/assets/movieClip.xml", mimeType="application/octet-stream")]
privatestaticconstSpriteSheetXML:Class;//embed Sprite sheet data file
[Embed(source ="/assets/movieClip.png")]
privatestaticconstSpriteSheet:Class;//embed Sprite sheet
[Embed(source ="/assets/pon.mp3")]
privatestaticconstSoundPon:Class;//embed一個聲音檔
publicfunctionGame7()
{
super();
addEventListener(Event.ADDED_TO_STAGE, init);
}
privatefunction init(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_container =newSprite();
addChild(_container);
addChild(newStats());
var bitmap:Bitmap=newSpriteSheet();
var texture:Texture=Texture.fromBitmap(bitmap);//將Sprite sheet轉成Texture
var xml:XML = XML(newSpriteSheetXML());//產生一個Sprite sheet data的XML
var textureAtlas:TextureAtlas=newTextureAtlas(texture, xml);//新增一個TextureAtlas,把texture與xml傳進去
var frame:Vector.<Texture>= textureAtlas.getTextures("movieClip.swf/");//將textureAtlas裡名稱為"movieClip.swf/"開頭的SubTexture取出來
var movieClip:MovieClip=newMovieClip(frame,30);//新增一個MovieClip,第一個參數傳入剛產生的frame,第二個參數設定fps
movieClip.x =0;//設定movieClip座標
movieClip.y =0;//設定movieClip座標
movieClip.setFrameDuration(0,0.5);//我們可以設定某個frame的停留時間,frame數由0開始
var soundPon:Sound=newSoundPon();//新增一個Sound
movieClip.setFrameSound(18, soundPon);//我們可以設定某個frame播放聲音,frame數由0開始
_container.addChild(movieClip);//將movieClip加到場景上
Starling.juggler.add(movieClip);//最後別忘了加到Starling.juggler開始播放
}
}
首先我們將movieClip.png與movieClip.xml embed進來。將圖片轉成texture,data存到xml,然後新增一個TextureAtlas,將texture與xml傳進去。接著用
textureAtlas.getTextures("movieClip.swf/")
把我們剛剛在movieClip.xml裡看到name開頭為"movieClip.swf/"的texture都取出來給frame。這時終於輪到MovieClip登場,新增一個MovieClip,第一個參數把剛剛的frame丟進去,第二個參數可以設定fps。
順便介紹兩個好用的method。第一個為setFrameDuration(),可以另外再設定某個影格的停留時間,影格數從0開始。而setFrameSound()可以設定播放到某影格時播放一個聲音檔。
最後,把movieClip加到場景上,並且記得加到Starling.juggle才會開始播放。Demo如下:

一起來玩鳥 Starling Framework(7)MovieClip的更多相关文章
- 一起來玩鳥 Starling Framework 簡介
開場 Starling Framework是一套Flash 2D遊戲開發"工具",是使用Flash最新的Stage3D API建構出來的一套Framework.最大優點在於使用GP ...
- 一起來玩鳥 Starling Framework(5)Multi-Touch
這篇來談談Starling的Multi-Touch.前一篇也提到,Multi-Touch一樣是監聽TouchEvent.TOUCH,然後由TouchEvent的e.getTouches()取回多點的資 ...
- 一起來玩鳥 Starling Framework(2)效能測試以及Image與Texture
上一篇我們放了一個Quad與TextField在舞台上慢慢轉.眼尖的可能會發現轉起來邊緣有點鋸齒,這可以透過設定Starling的反鋸齒來解決,在Main.as裡,新增了_starling之後,可以加 ...
- 一起來玩鳥 Starling Framework(1)一定要的Hello World!
雖然已經一堆Hello World的介紹文章跟影片了,但中文資料畢竟是比較少,所以不能免俗的來一篇中文版Hello World.首先開啟一個AS3.0專案,fps不用客氣,設為60,Starling很 ...
- 一起來玩鳥 Starling Framework(6)Juggler、Tween、以及DelayCall
這篇開始來講Starling裡的Animation.Juggle是個簡單的Class,用來控制動畫的進行.他負責管理經由add()加進來的實現IAnimatable介面的物件,然後當Juggler的a ...
- 一起來玩鳥 Starling Framework(9)Particle
最後,來看看Starling裡一個很炫的功能:Particle.Particle屬於extension,所以要另外下載檔案:Starling-Extension-Particle-System.下載之 ...
- 一起來玩鳥 Starling Framework(4)TouchEvent,Touch,以及TouchPhase
這一篇來介紹一下TouchEvent.我們先來談單點的touch,下一篇再介紹MultiTouch.翻過Starling文件的應該會發現,Starling裡面沒有MouseEvent,而是整合在Tou ...
- 一起來玩鳥 Starling Framework(3)Button!
週末夜來介紹個簡單的DisplayObject就好.不論是在電腦上或行動裝置上,跟使用者互動次數最多的,大概就是按鈕了.因此,Starling有個Button類別,來做出這個常用的互動元件. 同樣是因 ...
- 一起來玩鳥 Starling Framework(8)BitmapFont
所謂BitmapFont,就是事先將我們會用到的字型,會用到的字,輸出成一張圖片,類似Sprite sheet,以及一個xml格式的Data file,然後我們一次將這文字圖片轉成Texture,up ...
随机推荐
- linux驱动基础系列--linux spi驱动框架分析
前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...
- Crontab无法自动执行,直接运行脚本却能执行
Crontab无法自动执行,直接运行脚本却能执行 http://bbs.chinaunix.net/thread-1926428-1-1.html crontab -e crontab内容为* * * ...
- 【反演复习计划】【COGS2431】爱蜜莉雅的求助
出题人怎么这么不认真啊==明明官方译名是爱蜜莉雅…… 而且我们爱蜜莉雅碳是有英文名哒!是Emilia.你那个aimiliya我实在是无力吐槽…… 不过抱图跑23333首先这很像约数个数和函数诶!但是唯 ...
- 【反演复习计划】【bzoj3994】约数个数和
首先要用数学归纳证明一个结论,不过因为我实在是懒得打公式了... 先发代码吧. #include<bits/stdc++.h> #define N 50005 using namespac ...
- css3带你实现酷炫效果
css3 私有前缀 -webkit- chrome/safari等webkit内核浏览器 -moz- firfox -o- opera -ms- IE css3 盒子模型 box-sizing 值co ...
- JS计算两个日期之间的天数
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- KVM(六)Nova 通过 libvirt 管理 QEMU/KVM 虚机
1. Libvirt 在 OpenStack 架构中的位置 在 Nova Compute 节点上运行的 nova-compute 服务调用 Hypervisor API 去管理运行在该 Hypervi ...
- 创建ProcessEngine
activiti流程引擎是通过activiti.cfg.xml文件配置的(这并不符合Spring构建流程引擎的编码风格). ProcessEngine processEngine = ProcessE ...
- poj 2242(已知三点求外接圆周长)
The Circumference of the Circle Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8310 ...
- Android xmlpull 方式解析xml文件
1.新建一个xml文件,放在res/xml目录下 <?xml version="1.0" encoding="utf-8"?> <citys& ...