我使用以下代码动态添加了一个影片剪辑:
var apie=new cPie()
apie.x=100
apie.y=100
stage.addChild(apie)
我现在在舞台上有一个馅饼。百胜。假设这就像通过拖放放置在舞台上的影片剪辑一样,我将其添加到更改饼图中的实例。
var apie=new cPie()
apie.x=100
apie.y=100
apie.cherry.gotoAndStop(2)
stage.addChild(apie)
cherry是cPie影片剪辑中的一个实例,它是另一个由3帧组成的影片剪辑。我希望它转到第二帧。通常,这样做会起作用,但是当尝试使用ActionScript添加的影片剪辑时,我遇到了以下运行时错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at pies_fla::MainTimeline/frame1()
与往常一样,返回的错误并没有帮助我解决这个问题。它与“隐含强制”的东西一样模糊不清,这对我来说没有意义,因为我不是英语专业。我所知道的是我做错了什么,结果我得到了这个错误。正确的方法是非常感谢。
P.S。我计划在循环中使用它。请考虑到这一点。
答案 0 :(得分:0)
我认为错误是由行apie.cherry.gotoAndStop(2)
引起的。您可能需要将其更改为apie.getChildByName("cherry").gotoAndStop(2)
,但由于您的饼图是一个动画片段,因此儿童通常不会立即实例化。
解决这个问题的方法是在尝试访问MovieClip的子项之前等待帧重绘。
答案 1 :(得分:0)
您收到该错误的原因是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方法完成的。我将其设为只读的原因是为了避免以下内容:
cherryPie.cherry = new FakeCherry();