AS3:在类之间导入类/共享变量

时间:2012-11-10 21:36:40

标签: actionscript-3 class

好的,这是我的问题:我在名为Mirror

的类中有一个变量
public var line:Sprite = new Sprite(); 

我想在另一个名为MovieClip的类中使用该变量。我在MovieClip类中导入了类:

   public class MovieClips extends MovieClip
{
    import Mirror;
    public function MovieClips(radius:int, _x:int, _y:int,size:int,span:int,addl:Array) 
    {....

但是当我尝试做这样的事情时:

if (Mirror.line.hitTestObject(ball) == true) {
                    speedY *= -1;
                }

它显示为错误:通过具有静态类型Class的引用访问可能未定义的属性行。我不确定我做错了什么?我是以错误的方式导入我的课程吗?

2 个答案:

答案 0 :(得分:0)

如果您有一个类,如Mirror并执行Mirror.line之类的操作,则表示您正在尝试访问名为line的静态类变量。静态变量/方法与类绑定,而不是该类的实例。

您尚未将行定义为静态变量,因此您会收到错误。 我不确定你是否希望它成为一个静态变量,而且很可能只是让Mirror类混淆了Mirror类的实例。

您可能在某处创建了Mirror类的实例:
如果使用FlashPro,则var myMirror:Mirror = new Mirror()或在时间轴上拖动实例(然后可以给它一个'myMirror'实例作为示例)。

您将在Mirror类的实例上访问line。因此,如上所述,它将是myMirror.line

导入类不允许您访问该类的任何实例,因此如果您希望能够从Mirror类中访问MoveClips的实例,则需要传入对它的引用,或者使用parent关键字到达正确的范围(因此,如果您的Mirror实例和MovieClips实例位于同一时间轴/父级,则可以执行Mirror(MovieClip(parent).myMirror).line - 假设你的父母是MovieClip类型。


如果你确实想要它作为静态变量,只需将静态访问修饰符添加到它的定义中。

public static var line:Sprite

请记住,尽管静态变量总是存在于内存中,无论你是否有任何实例。

答案 1 :(得分:0)

您应该将Mirror对象传递给MovieClips对象,如下例所示:

package {

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;

    public class Main extends Sprite 
    {

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);

        }// end function

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);

            var mirror:Mirror = new Mirror();
            var movieClips:MovieClips = new MovieClips(mirror);

        }// end function

    }// end class

}// end package

import flash.display.MovieClip;

class Mirror extends MovieClip {

    public var line:MovieClip;

    public function Mirror():void {

        line = new MovieClip();

    }// end function

}// end class

class MovieClips extends MovieClip {

    public function MovieClip(mirror:Mirror):void {

        mirror.line;

    }// end function

}// end class

此外,您可以通过Mirror.line只读来改进:

class Mirror extends MovieClip {

    private var _line:MovieClip;

    public function get line():MovieClip {

        return _line;

    }// end function

    public function Mirror():void {

        _line = new MovieClip();

    }// end function

}// end class