0

有没有理由不能工作?AS3类无法将MovieClip作为参数传递给其超类...?

下面是一个代码示例:

main.as

package{ 
    import flash.display.MovieClip; 
    public class main extends MovieClip{ 
     public function main(){ 
      addChild(new Square()); 
     } 
    } 
} 

Square.as(这是一个链接的影片剪辑有一个呼吁其时间轴 “submc” 影片剪辑)

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”属性无法通过广场超级构造得到。我可能错过了什么?有什么建议?

感谢

回答

0

老回答 您必须初始化submc。 Square类的主体应该是这样的:

public var submc:MovieClip; 
public function Square() 
{ 
    submc = new MovieClip(); 
    super(submc, 1234); 
    trace("submc : " + submc); 
} 

变量submc为空,直到您初始化或使其引用一些其他的实例化对象。

新建答案 如果引用的时间轴上的元素,你可能需要等到父元素已被添加到您引用嵌套元素之前的阶段。为此,您可以为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); 
    } 
} 

我不完全确定这是你的问题。但是,我很快就看到了与引用舞台元素相似的问题。

+0

这就是我发布的内容,直到我意识到他写道它在时间轴上。尽管如此,这仍然是个问题。 – dain 2011-06-03 16:13:39

+0

啊好吧...谢谢你的头,改变我的答案... – JeremyFromEarth 2011-06-03 16:18:24

+0

我做了一些其他的测试,但我最终使用了一个ADDED_TO_STAGE事件。在例子中,sub_mc引用是null,直到Square被添加到舞台上(如你所说的)。我必须使用此事件,以便movicelip引用通过变量“sub_mc”获取*链接*。这证实了我的问题:将一个moviclip引用传递给“超类”构造函数是不可能的......感谢您的答案! – Simmoniz 2011-06-07 13:15:24

相关问题