2012-05-25 28 views
6

我已經開始在Flash Professional中構建一個粗略的遊戲引擎框架,我很好奇我如何在Flash庫中創建對象,以便能夠拖放到舞臺上並指定可從AS3訪問的屬性。如何在Flash Professional中將Flash Stage實例的唯一屬性傳遞給AS3腳本?

實施例:作爲
我想創建一個開關對象(例如,光開關),使得當它與玩家interactes,它會觸發特定代碼中的東西,例如在房間內的光導通。

我知道Flash內置了UI組件,您可以在Flash Professional環境中定義屬性(請參閱下圖),並且我想知道是否有方法創建我自己的自定義樣式組件,以便我可以在閃存(.fla)中打開我的級別文件,然後從我的磁帶庫中拖出一個開關組件,然後輸入一些信息,例如它控制着什麼燈,以及其他任何我想要的信息。

flash component parameters

(以上參數控制我要找的類型的示例)

我讀過一些關於延長閃存UIComponent類,但我覺得這是不正確的因爲它對我想要的東西過度殺傷。我想要的只是將庫階段實例中的一些基本參數傳遞給AS3。我不想通過實例名稱傳遞數據,因爲如果我想要進行更復雜的交互,這看起來非常混亂。

謝謝!

+1

是[這](http://www.adobe.com/devnet/flash/learning_guide/components/part03.html)你在找什麼呢? –

+0

是的!我正在尋找這樣的東西。不幸的是,這篇文章並沒有真正解釋組件如何與AS3一起工作。例如,如何從AS3訪問這些參數,需要使用哪種類型的類?等等。文章說這是可能的,但並沒有真正揭示細節。有關於擴展UIComponent的教程的鏈接,但我只想構建自己的基本非UI相關組件。 – justinl

+0

從Flash IDE進行編輯會使遊戲變得混亂,爲什麼不在as3文件中創建句子並將JSON用於動態室。你甚至可以製作關卡編輯器,但是使用閃存編輯器進行編輯並不是你應該休閒的方式。 – ymutlu

回答

0

我想說的是,你可以讓整個事情都是數據驅動的,所以你可以將IDE和數據結合起來,以提出最終的遊戲。

但是考慮一下......它可能是你想要的。

如果你有,例如,一個BaseSwitch類:

public Class BaseSwitch extends MovieClip { 
    private var _lightName:String; 
    private var _light:Light; 
    public function get lightName():String { 
     return lightName; 
    } 
    pubic function set lightName(value:String):void { 
     if (value != _lightName) { 
     _lightnName = value; 
     //Note I don't advocate having children reach into their parents like this, 
     //but you sound like you don't want the parent involved in the process, so 
     //this is one way you could do it. 
     if (parent.hasOwnProperty(lightName) && parent[lightName] is Light) { 
      _light = parent[lightName]; 
     } else { 
      trace('Could not find light', _lightName); 
     } 

     } 
    } 
    //other code to listen for gestures and operate the light 
} 

現在,當你想要一個開關操作特定光的名字,創建庫實例及其基類設置爲BaseSwitch。當你關閉你設置基類的對話框時,你會注意到它給了你一個對話,它無法在類路徑中找到類,並且會生成一個類。您將使用設置lightName的類來替換它。在根目錄中創建一個與您的庫實例具有相同名稱的新AS3類。它應該是這個樣子:

public class SpecificSwitch { 
    public function SpecificSwitch() { 
     super(); 
     lightName = 'theSwitch'; 
    } 
} 

其他可能的選擇包括具有父類投其所好開關的情況下,基於名字的光的情況下,所以如果發現光線1和light1Switch,它要麼給出一個參考到開關的燈光,或者只是在自己的事件監聽系統中設置一個映射。

0

我會創建一個「切換」影片剪輯並將其導出到actionscrip,與「輕」影片剪輯相同。在主類.as文件中,我會將它們插入到舞臺中,使用addChild(剪輯),然後向「開關」影片剪輯添加一個點擊監聽器來控制「燈光」。

0

這可以很容易地完成。

在我看來,組件是錯誤的方法。

首先你會想要設置Actionscript linkage/label你的Library項目。 在庫面板中。 - 右鍵點擊「yourMC」>>點擊「屬性」。 - 在屬性對話框中勾選「導出動作腳本」 - 然後命名您的類,例如「yourMC_Class」

現在MC已準備好在您的代碼中被引用。

接下來你會想要將你的「yourMC」從庫中動態添加到舞臺。 可以這樣做。

//第一參考庫項目

var yourMC_ref:yourMC_Class = new yourMC_Class(); 

//然後動態MC項目裝入VAR

var your_MC_OBJ = yourMC_ref; 

//然後添加MC上演。

this.addChild(your_MC_OBJ); 
your_MC_OBJ.x = 200; 
your_MC_OBJ.y = 100; 

簡而言之,這就是我如何添加庫項目的階段。

顯然是基本功能/代碼。

在一個項目中,我將不得不在外部類的所有代碼,在這種情況下,您只需設置瓦爾公共瓦爾

public var yourMC_ref:yourMC_Class = new yourMC_Class(); 
public var your_MC_OBJ = yourMC_ref; 

最後3行代碼到一個公共職能

public function ADD_First_MC() 
{ 
     this.addChild(your_MC_OBJ); 
     your_MC_OBJ.x = 200; 
     your_MC_OBJ.y = 100; 
} 

現在'your_MC_OBJ'可以以更復雜的方式使用。

例如。創建一個燈開關有很多選項,取決於你需要如何執行功能。 例如。將不同的MC庫項目應用到MC中的「your_MC_OBJ」 播放特定幀。

但是,如果是我,我只需使用鼠標功能來使用addChild removeChild打開或關閉燈光。 例如。

public var LightON = 0; 
public var yourMC_ref:yourMC_Class = new yourMC_Class(); 
public var your_MC_OBJ = yourMC_ref; 

然後創建處理的開/關事件

public function LightON_OFF() 
    { 
     if(LightON == 1) 
      { 
       this.addChild(your_MC_OBJ); 
       your_MC_OBJ.x = 200; 
       your_MC_OBJ.y = 100; 
      } 
     if(LightON == 0) 
      { 
       this.removeChild(your_MC_OBJ); 
      } 
    } 

希望這有助於公共職能。

0

因此,對於你想要的,雖然它可能不是做你想做的最好的方法,但我明白這是你正在構建的體驗。

使用組件,是...以下面的方式(最簡單的一種):

  • 創建一個影片剪輯庫中
  • 右鍵單擊它
  • 點擊「組件定義」
  • 添加的屬性,設置一個名稱,一個變量名(VAR測試,針對該物質)和默認值
  • 單擊確定

  • 打開你的影片剪輯

  • 打開第一幀的代碼並聲明沒有初始值的變量(var test:String;)
  • 跟蹤它的值(trace(test); )

  • 回到舞臺根

  • 拖放從庫拖放項目到舞臺
  • 測試它(命令/ Ctrl + Enter)(也許它會打印空,不知道爲什麼,它忽略有時默認值)

  • 在舞臺上選擇組件

  • 打開屬性面板(窗口>屬性)
  • 轉到該面板上和組件參數更改屬性值

  • 你應該看到追溯到上控制檯

的價值,我想,這樣你可以使用來自組件的屬性你想要的東西,就像使用一個字符串並通過其名稱獲取受控mc。

好運

相關問題