2010-05-29 280 views
0

如何從另一個類(或框架腳本)調用公共函數或變量類的變量?我一直得到1061:調用一個可能未定義的方法getSide通過一個靜態類型的引用flash.display:Sprite。ActionScript從外部訪問函數/變量

//Framescript 
var a:Sprite = new customRect(); 
addChild(a); 
a.getSide(); 

//.as file 
package 
{ 
import flash.display.Sprite; 

public class customRect extends Sprite 
{ 
public var side:Number; 

private function customRect() 
{ 
var box:Sprite = new Sprite(); 
box.graphics.beginFill(); 
box.graphics.drawRect(0, 0, 200, 200); 
box.graphics.endFill(); 

side = box.width; 
} 

public function getSide():void 
{ 
trace(side); 
} 
} 
} 

回答

1

您需要鍵入另一個類作爲它的類型。默認情況下,Sprite不會擁有任何你想要訪問的屬性,所以你不能只是做mysprite.myRandomVariableName。但是,如果您碰巧知道mysprite實際上是MyClass類型,那麼您可以執行MyClass(mysprite).myRandomVariableName或(mysprite as MyClass).myRandomVariableName。使用as關鍵字時,請注意,如果mysprite不是MyClass類型,則類型化的mysprite將評估爲null。如果mysprite不是MyClass類型,嘗試使用先前方法將mySprite輸入MyClass將會引發錯誤。

另外,我相信你可以使用方括號來訪問一個精靈的動態屬性(即MySprite的[「myRandomVariableName」],但它是真正更好的做法是強類型的對象。

//編輯,因爲你發佈一個代碼示例:

所有你需要的是在這裏:

var a:CustomRect = new CustomRect();//note that since CustomRect is a class name, it should be captialized. 
+0

我真的不能相信,這一直是這樣一個巨大的問題,當我一直這麼簡單。謝謝! – TheDarkIn1978 2010-05-29 20:08:52

+0

沒有問題:)從文檔中沒有那麼清楚。 – quoo 2010-05-29 20:24:59

1

你們是不是要調用Sprite類或那些您已經添加到雪碧的子類的實際方法,我的猜測是,你需要將該變量轉換爲您正在使用的實際課程。因此,而不是:

someReference.yourFunction(); 

你可以嘗試: - 如果你這樣做,你可以使用VAR someReference簡單地將其

YourClass(someReference).yourFunction(); 

...如果你不控制someReference的打字這只是需要:YourClass讓編譯器知道它是一個YourClass類型的變量,而不是Sprite。

加入你的代碼示例更新後,更改:

var a:Sprite = new customRect(); 

var a:customRect = new customRect(); 

所以編譯器知道它是一個customRect而不是 '一般' 雪碧。

作爲一個例外:自定義以大寫字母開頭的類名:所以使用CustomRect而不是customRect。