在ActionScript 3中使用类创建影片剪辑实例

时间:2014-02-04 21:36:50

标签: actionscript-3 flash oop

首先,我想说我只有几个小时的AS3经验。

现在,我有2个.as文件,其中一个是main.as,第二个是Ship_.as

main.as:

package{
    import flash .display.*;
   // import Enemy;
    public class main extends MovieClip{
        public function main(){
    var hero:Ship_=new Ship_();
    addChild(hero); // I have to use addChild here also.
        }

    }
}

和Ship_.as是:

package{
    import flash .display.*;

    public class Ship_ extends MovieClip{
        private var myHero:Ship=new Ship(); // moved inside of class definition

        public function Ship_(){
            addChild(myHero);  // I think I added my movie clip into stage by this.
        }
    }
}

这是我的Ship MovieClip:http://prntscr.com/2pjzdwv

当我测试它时,我收到一条错误,上面写着“1013: The private attribute may be used only on class property definitions.

如果我将private var myHero:Ship=new Ship();更改为public var myHero:Ship=new Ship();,则会出现1180: Call to a possibly undefined method addChild.错误。有人帮我吗?

修改

为了能够将空间movieClip看到屏幕,我必须使用两个addChild()方法,因为我在代码中注释,尽管我认为Ship_构造函数中的一个就足够了。你能解释我为什么还应该使用addChild(hero);

1 个答案:

答案 0 :(得分:1)

package{
    import flash .display.*;

    public class Ship_ extends MovieClip{
        private var myHero:Ship=new Ship(); // moved inside of class definition

        public function Ship_(){
            addChild(myHero); // moved inside of contructor
        }
    }
}

当您在addChild()中致电Ship_时,会将myHero添加到Ship_的实例中。但Ship_'在哪里?此时,它只是Main.main()内的变量,但尚未添加任何变量。

所以你拥有的就像三个盒子一样,A,B和C.起初​​它们全都是布局的,没有一个在另一个里面。但是你把盒子C放进了盒子B里。但是现在你只有B里面的C,A仍然是自己的。因此,为了完成这个过程,你必须将Box B放入Box A中,并且因为C已经在B中,所以这将使得C最终位于A的内部。