2013-02-20 93 views
0

我仍然有問題,所以我做了一個非常基本的main.swf加載sub.swf。Actionscript 3將變量從父項傳遞給子項

Sub.swf有有他們的α= 0

兩個主權財富基金編譯罰款2個矩形影片剪輯(紅色和藍色),並沒有錯誤,但紅色阿爾法不導就這麼的價值。「西班牙」從main.swf變量不能在sub.swf中被識別。有任何想法嗎?

的main.swf動作:

import flash.display.Loader; 
import flash.display.MovieClip; 
import flash.events.Event; 

var child_loader:Loader = new Loader(); 

var req:URLRequest = new URLRequest("sub.swf"); 

child_loader.load(req); 

child_loader.contentLoaderInfo.addEventListener(Ev ent.COMPLETE, done); 

function done(e:Event):void{ 
    addChild(child_loader); 
    MovieClip(child_loader.content).language = "spanish"; 
} 

sub.swf動作:

import flash.display.Loader; 
import flash.display.MovieClip; 
import flash.events.Event; 

function callFunction(_txt:String):void{ 
    var sublanguage = (MovieClip(parent.parent).language) 

    if (sublanguage == "spanish"){ 
    red.alpha = 1; 
    }else if (sublanguage == "english"){ 
     blue.alpha = 1; 
    } 
} 
+0

不,你的callFunction應該看看傳入的_txt字符串,而不是試圖伸出父母。所以從加載類,你會使用'YourClass(child_loader.content).callFunction('english')'。請注意,您的代碼似乎被格式化爲時間軸代碼。當我發佈我的文檔時,您是否理解[文檔類](http://active.tutsplus.com/tutorials/actionscript/quick-tip-how-to-use-a-document-class-in-flash/)的概念回答? – 2013-02-23 02:30:59

回答

0

您應該能夠建立一個功能在你的孩子的電影,可以從你的父母被調用。你可以通過任何你想要的作爲論點。

+0

我修改了我的問題。請再次查看。 – ROUNDPAWS 2013-02-22 02:19:55

1

問題在於AS3不像AS2那樣是動態的,因此子文檔需要父級知道的屬性或方法。要做到這一點

的一種方法是比較簡單的:

 
package { 
    public class ChildClass extends MovieClip { 
     protected var _property:String; 

     public function get property():String { 
      return _property; 
     } 
     public function set property(value:String):void { 
      if (value != _property) { 
       _property = value; 
       //do something, because now the property has been set 
      } 
     } 
    } 
} 

你只適用於作爲文檔類你加載的SWF文件,然後在裝載的功能,你會做什麼像:

 
//cast to ChildClass, so you will know you have the property available 
var childClass:ChildClass = Loader(event.currentTarget).contentLoaderInfo.content as ChildClass; 

//if the variable content is null, the swf had a different Document Class 
if (childClass) { 
    //now you can set your variable, you're good 
    childClass.property = 'foo'; 
} 

與ActionScript中的大多數事情一樣,你可以做最簡單的方式(如上圖所示),或者你可以做的正確方法。正確的方法是use an Interface。接口是一個類的「藍圖」。在這種情況下,需要說的是任何實現該接口的類將總是具有一個property吸氣器和一個property調節器。你不能只使用一個變量,因爲接口只允許使用函數。

但無論如何,使用接口的優勢,特別是對於你的情況,你不必在與你正在加載的swf相關的特定類中進行編譯。相反,你只需要在Class的「合同」中進行編譯,這個重量要輕得多。但是因爲玩家不會將contentLoaderInfo.content投到ISomeInterface,除非它的滿足該合同,您可以在完成投射後自信地設置該屬性。

+0

+1對於接口 – abnvp 2013-02-20 06:22:46

+0

上的建議我修改了我的問題。請再次查看。 – ROUNDPAWS 2013-02-22 02:19:18

相關問題