,你有這個錯誤的原因是因爲cherry
不是cPie
對象的屬性或方法,它爲您cPie
顯示對象容器的子顯示對象實例名稱。要訪問cherry
顯示對象,您必須使用cPie
對象的繼承DisplayObjectContainer
方法,即getChildByName()
方法。還好,這是由frankhermes另一個答案已經解釋過,所以我會解釋給下面的示例訪問的子顯示對象另一個(而且可能更好)的方法:
CherryPie.as:
package display
{
import flash.display.MovieClip;
public class CherryPie extends MovieClip
{
private var _cherry:MovieClip;
public function get cherry():MovieClip
{
return _cherry;
}// end function
public function CherryPie()
{
_cherry = cherryMC;
}// end function
}// end class
}// end package
Main.as:
package
{
import flash.display.Sprite;
import flash.events.Event;
public class Main extends Sprite
{
public function Main():void
{
init();
}// end function
private function init():void
{
var cherryPie:CherryPie = new CherryPie();
cherryPie.x = 100;
cherryPie.y = 100;
cherryPie.cherry.gotoAndStop(2);
addChild(cherryPie);
}// end function
}// end class
}// end package
通過爲cherryPie_mc
影片剪輯創建一個基類,你可以創建一個名爲cherry
財產,在啓動中的C cherry
子顯示對象分配給它姑娘。這樣你就可以直接訪問類的cherry
子顯示對象:
cherryPie.cherry.gotoAndStop(2);
,而不是:
cherryPie.getChildByName("cherryMC").gotoAndStop(2);
您可以設置CherryPie
類作爲cherryPie_mc
影片剪輯的基類,如下所示:
注意:符號屬性中的「名稱」應爲「cherryPie_mc」
也爲那些想知道爲什麼我沒有設置cherry
作爲公共財產
public var cherry:MovieClip;
,而是使用一個getter方法來訪問私有財產
private var _cherry:MovieClip;
public function get cherry():MovieClip
{
return _cherry;
}// end function
是讓櫻桃對象讀 - 只有通過省略setter方法才能完成。我將它設爲只讀的原因是爲了避免類似以下內容:
cherryPie.cherry = new FakeCherry();
你有點飛過我的頭。我無法真正理解這一切,特別是因爲我不想使用包,所以我不知道如何將其轉換爲正常的幀內AS。你能提供一個沒有包的解決方案嗎? – Anonymous 2011-04-11 19:59:51
我個人建議不要使用時間軸,但即使您這樣做,也並不意味着您也不能使用自己的用戶定義類。只需在你的源代碼根目錄下創建一個文件夾(你的情況可能在包含你的「fla」和「swf」文件的文件夾中),然後在你的「display」文件夾中創建一個名爲「CherryPie」的「as」文件,將CherryPie類複製並粘貼到該文件中。然後更改「cherryPie_mc」動畫片段的符號屬性,使其與匹配答案中的屏幕截圖相匹配。 – Taurayi 2011-04-12 11:39:06