前幾天學了Starling的皮毛,想說這次要放入新動畫,就索性拿來用吧,畢竟這樣才能學比較快。
成果:
1.從main(原生)去呼叫starling的function
2.Starling跟原生同時顯示要注意圖層關係
1.----------------------------------------------------------------------------------------------------------------------
首先前置作業:
1.fps設為60
2.發佈為Flash Player 11
3.flashdevelop的專案Properties->Compiler Options->Additional....裡加入-swf-version=13
參考網頁:http://grayliao.blogspot.tw/2011/11/starling-framework1hello-world.html
接著先在main.as裡加入starling
_mariStarling = new Starling(SmallAnime, this.stage);
_mariStarling.start();
之後加入seven的動畫
-------------------------------------------------------------
public class SevenA extends Sprite{
private var _mc:MovieClip;
[Embed(source="/../bin/anime/seven.xml", mimeType="application/octet-stream")]
private var AtlasXML:Class;
[Embed(source="/../bin/anime/seven.png")]
private var AtlasTexture:Class;
public function SevenA() {
var texture:Texture = Texture.fromBitmap(new AtlasTexture());
var xml:XML = XML(new AtlasXML());
var atlas:TextureAtlas = new TextureAtlas(texture, xml);
_mc = new MovieClip(atlas.getTextures("seven.swf/"), 30);
addChild(_mc);
_mc.loop = false;
_mc.addEventListener(EnterFrameEvent.ENTER_FRAME, test);
}
public function play():void {
Starling.juggler.add(_mc);
}
private function test(e:EnterFrameEvent):void {
var mc:MovieClip = e.currentTarget as MovieClip;
if (mc.isComplete) {
removeChild(mc, true);
}
}
}
--------------------------------------------------------
接著在SmallAnime.as裡加入
public function sevenStart():void {
var seven:SevenA = new SevenA();
addChild(seven);
seven.play();
}
原本是要game.as去呼叫sevenStart這個function---->出錯
發現原來starling跟原生的資訊不能混用
所以移到最前端main.as
var game:SmallAnime = Starling.current.root as SmallAnime;
game.sevenStart();
讓main 去呼叫sevenStart這個function-------->出錯
錯誤原因:Starling.current.root是null
之後去找了相關文章:
rritw.com/a/bianchengyuyan/C__/20121211/269850.html
http://www.starlinglib.com/wiki/News:%E5%85%B3%E4%BA%8EStarling%E7%9A%84%E5%85%A5%E5%8F%A3%E7%B1%BB
找到root被建立後會產生的事件--->"rootCreated"
最後改成
-------------------------------------------------------------
private function makeStarling():void {
_mariStarling = new Starling(SmallAnime, this.stage);
_mariStarling.start();
_mariStarling.addEventListener("rootCreated",rootCreatedHandler);
}
private function rootCreatedHandler():void{
var game:SmallAnime = Starling.current.root as SmallAnime;
game.sevenStart();
}
------------------------------------------------------------
終於讓game.sevenStart可以從main來呼叫
*如果要創個物件來管理SmallAnime裡的function
也是可以建個原生界的Sprite
把SmallAnime傳進去~~就可以用了
----------------------------------------------------------------------------------------------------------------------
結果發現starling的圖層在原生的下面
所以還是用原生的來做動畫了
不過這道是不錯的經驗
希望下一個遊戲就可以用starling來顯示