2012年12月25日 星期二

工作紀錄12.12.26 -starling初用

  前幾天學了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來顯示 

工坊再度營業

因為最近比較認真研究Flash的東西

想說有個blog來記錄

比較清楚自己的進度在哪

希望這次不要又只有寫這篇而已

哈哈