有什么原因导致它不起作用吗?
以下是代码示例:
main.as
package{
import flash.display.MovieClip;
public class main extends MovieClip{
public function main(){
addChild(new Square());
}
}
}
Square.as(这是一个链接的MovieClip,在其时间轴上有一个名为“submc”的MovieClip)
package{
import flash.display.MovieClip;
public class Square extends SuperSquare{
public var submc:MovieClip;
public function Square(){
super(submc, 1234);
trace("submc : " + submc);
}
}
}
SuperSquare.as
package{
import flash.display.MovieClip;
public class SuperSquare extends MovieClip{
public function SuperSquare(_p:MovieClip, _value:Number){
trace("_p : " + _p + " _value : " + _value);
}
}
}
运行此代码时,它会跟踪:
_p : null _value : 1234
submc : [object MovieClip]
“submc”属性无法通过Square超级构造函数。我可能错过了什么?有什么建议吗?
由于
答案 0 :(得分:0)
旧答案 你必须初始化submc。 Square类的主体应如下所示:
public var submc:MovieClip;
public function Square()
{
submc = new MovieClip();
super(submc, 1234);
trace("submc : " + submc);
}
变量submc为null,直到您初始化它或使其引用其他实例化对象为止。
新答案 如果要引用时间轴上的元素,则可能需要等到父元素添加到舞台后再引用嵌套元素。为此,您可以为ENTER_FRAME或ADDED_TO_STAGE添加事件侦听器。
package{
import flash.display.MovieClip;
public class Square extends SuperSquare
{
public var submc:MovieClip;
public function Square()
{
// -- either one of these should work
addEventListener( Event.ADDED_TO_STAGE, onAdded );
addEventListener( Event.ENTER_FRAME, validateStage );
}
}
public function onAdded( event:Event ):void
{
// -- creates a problem because you can only call a super constructor in a constructor
// super(submc, 1234);
trace("submc : " + submc);
}
public function validateStage( event:Event ):void
{
if( !stage ) return;
if( stage.stageWidth == 0 ) return;
// -- ok to reference stage elements now
removeEventListener( Event.ENTER_FRAME, validateStage );
}
}
我不完全确定这是你的问题。但是,我已经看到过早引用舞台元素的类似问题。