2013-03-03 86 views
0

Inside flash cs6我繪製了一個Flash動畫片段,其中我將導出設置設置爲abc.Gameboard。在遊戲板裏面,我有一些片段(符號:Piece),我將其導出爲abc.Piece - 兩個基類都設置爲MovieClip和類文件。這件作品有框架標籤,如命中,等等。我的問題是訪問代碼片段,所以我可以例如。 gotoAndPlay(「我的」) - 此時該事件僅發生一次,這是董事會最後一件事。 我可以在這最後一部分設置框架動作,但想弄清楚如何爲每件作品。無法訪問影片剪輯中的兒童

我一個遊戲鍵盤添加到舞臺,像這樣

var gb:Gameboard = new Gameboard(); 
gb.name = "gb001"; 
contextView.addChild(gb); 

然後

contextView.addEventListener(Event.ADDED, thingAdded); 

private function thingAdded(event:Event):void 
{ 
    var type:String = event.target.toString(); 
    switch(type) 
    { 
     // this runs only once - i want it to run for each piece that is inside the symbol 
     case "[object Piece]": 

     var p:MovieClip = event.target as Piece; 
     p.gotoAndPlay("mine"); 
     break; 
    } 
} 

,或者如果有一個更好的方式,將是巨大的。這看起來很笨重

編輯:位有關我如何構建遊戲板的更多信息 在illustrator中繪製一組形狀 - m問它(Gameboard區域)。以圖形形式導入Flash。將圖形轉換爲多個影片剪輯符號(因此JSFL可以向下鑽取並訪問蒙版) - 運行JSFL腳本&創建00的碎片。然後我在Piece和Gameboard上設置導出設置並將Gameboard添加到contextView。

回答

0

我居然寫了entire article約一次。對於添加的每個DisplayObject,ADDED事件應該觸發一次。你確定你沒有使用ADDED_TO_STAGE,它不會冒泡嗎?如果您使用的是ADDED_TO_STAGE,那麼您需要將useCapture標誌設置爲true以使其爲所有子級啓動。

如果你想在過程中涉及RobotLegs,最好的辦法是簡單地爲每個特定的按鈕創建一個「標記」類,然後爲每個特定的按鈕創建一個不同的方式,然後爲每個類註冊一箇中介器將管理行爲。 Robotlegs已經內置了鉤子來監聽ADDED_TO_STAGE並執行此操作。

但是,您也可以考慮使用Flash IDE來實現它的功能,這是將東西放在舞臺上。在這種情況下,您的GameBoard實例將在您的主文檔Class的構造函數中準備就緒,以便您隨時隨地執行任何操作。

MPO是邏輯就是遊戲鍵盤不應該知道也不關心它是如何工作的內部,老老實實它可能甚至不應該是遊戲鍵盤的責任,處理簡單的東西,如按鈕切換狀態和事物。這應該取決於按鈕本身。如果按鈕不需要切換或超出SimpleButton所處理的任何位置,則可以在庫中而不是MovieClip中將按鈕實例聲明爲Button,並免費獲取所有這些東西,而不是自己編碼。

作爲一個很好的編碼器的一部分是能夠找出方法而不是來編碼一切。

+0

謝謝艾米。更多信息,我使用Illustrator/Flash和JSFL生成00的電影鏡頭,然後使用JSFL擴展將它們分配給單個Piece符號(但保留其在場景中的排列)。而不是使用contextView ... addChild(件)的標準r-legs中介器/信號/命令結構,它現在是如何工作的 - 只是爲了擁有更多的設計控制。我嘗試了ADDED和ADDED_TO_STAGE,但沒有使用捕獲標記,我會嘗試。 – MikeW 2013-03-03 22:05:15

+0

爲什麼不能再次定義over state功能? – 2013-03-03 22:24:09

+0

所有的狀態都是在IDE內部的Piece時間軸上定義的,因此所有狀態都可以正常工作。我還有另外兩個狀態是由robotlegs命令觸發的(想想多人消息),叫做「我的」和「他們的」 - 這是我試圖設置的2個狀態。它是唯一可以設置這些狀態的板塊上的最後一塊 - 但我還沒有嘗試過您的captureFlag提案。 – MikeW 2013-03-04 00:21:55

0

在他們的Gameboard內件?我想知道你的Gameboard結構。

如果你是對的。試試這個:

function thingAdded(e:Event):void 
{ 
    if(!e.target is Gameboard) return; 

    var mc:Gameboard = Gameboard(e.target); 

    var i:int = 0; 
    while(i<mc.numChildren) 
    { 
     if(mc.getChildAt(i) is Piece) 
     { 
      var piece:Piece = Piece(mc.getChildAt(i)); 

      piece.gotoAndStop(2); 
     } 
     i++; 
    } 
} 

這裏是我的示例代碼:Gameboard

+0

謝謝你 - 我會下載並在稍後在家中嘗試 - 在遊戲板的結構上添加一些評論。 – MikeW 2013-03-03 22:11:06