繁体   English   中英

AS3:无法创建 Movieclip 类实例?

[英]AS3: Can't create Movieclip class instance?

我只是在学习如何使用一些非常基本的代码在 AS3 中使用类,我正在努力弄清楚如何做最简单的事情。

我已将文档类设为“Test”类(本质上是我的主类),我试图用它做的就是将“WhiteBall”类(影片剪辑)的一个实例添加到舞台上。

'WhiteBall' 类应该允许我用键盘控制影片剪辑。 我不知道这部分是否有效,因为我不断收到此错误:

类型错误:错误 #1009:无法访问空对象引用的属性或方法。 在 WhiteBall$iinit()[/Users/Owner/Desktop/Animation/Coding/WhiteBall.as:13] 在 Test$iinit()[/Users/Owner/Desktop/Animation/Coding/Test.as:11]

这是“测试”类的代码:

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;



    public class Test extends MovieClip
    {
        var whiteBall:WhiteBall = new WhiteBall ();

        public function Test() {

            addEventListener(Event.ENTER_FRAME, whiteBallSpawn);

        }

        public function whiteBallSpawn(evt:Event) {


            stage.addChild(whiteBall);
            whiteBall.x = 200;
            whiteBall.y = 250;




        }





    }
}

这是“WhiteBall”类的代码:

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.KeyboardEvent;
    import flash.ui.Keyboard;

    public class WhiteBall extends MovieClip
    {


        public function WhiteBall() {

            stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
        }

        public function keysdown(mykey:KeyboardEvent) {

        if(mykey.keyCode==Keyboard.UP) {
            this.y--;
        }

        if(mykey.keyCode==Keyboard.DOWN) {
            this.y++;
        }

        if(mykey.keyCode==Keyboard.RIGHT) {
            this.x++;
        }

        if(mykey.keyCode==Keyboard.LEFT) {
            this.x--;
        }
    }
    }
}

'Test' 类中的第 11 行错误是指这一行:

var whiteBall:WhiteBall = new WhiteBall ();

我不知道这里有什么问题。 您能给我的任何帮助将不胜感激。

Organis 所说的是这样的:当您创建一个 DisplayObject,例如一个 MovieClip,它是您的 WhiteBall 扩展的类,那么该对象的 stage 属性为空。 这意味着当您尝试在其构造函数上访问白球的 stage 属性时

public function WhiteBall() 
{
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
} 

因为 stage 为空,所以抛出了一个错误。 所以要解决这个问题,最安全和最常见的方法是等到球被添加到舞台上,然后监听任何舞台键盘事件。 像这样:

public function WhiteBall() 
{
    if(stage != null)
    {
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
    }
    else
    {
       this.addEventListener(Event.ADDED_TO_STAGE, addedToStage);
    }
}
private function addedToStage(e:Event):void
{
   this.removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
}

因此,当您的 Test 类实例将球添加到舞台时,您的 WhiteBall 实例的 stage 属性将具有一个值,因此可以安全地侦听任何键盘事件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM