您收到该错误的原因是因为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 的属性,并在启动该类时为其分配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方法使cherry对象成为只读的。我将其设为只读的原因是为了避免以下情况:
cherryPie.cherry = new FakeCherry();