Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class AS3:Can';不创建Movieclip类实例?_Class_Actionscript 3_Flash_Null_Addchild - Fatal编程技术网

Class AS3:Can';不创建Movieclip类实例?

Class AS3:Can';不创建Movieclip类实例?,class,actionscript-3,flash,null,addchild,Class,Actionscript 3,Flash,Null,Addchild,我只是在学习如何使用一些非常基本的代码在AS3中使用类,我正在绞尽脑汁试图找出如何做最简单的事情 我已经将document类设置为“Test”类(基本上是我的主类),我所要做的就是在stage中添加一个“WhiteBall”类的实例(movieclip) “白球”课程应该允许我用键盘控制电影剪辑。我不知道这部分是否有效,因为我一直遇到以下错误: TypeError:错误#1009:无法访问空对象引用的属性或方法。 在WhiteBall$iinit()[/Users/Owner/Desktop/A

我只是在学习如何使用一些非常基本的代码在AS3中使用类,我正在绞尽脑汁试图找出如何做最简单的事情

我已经将document类设置为“Test”类(基本上是我的主类),我所要做的就是在stage中添加一个“WhiteBall”类的实例(movieclip)

“白球”课程应该允许我用键盘控制电影剪辑。我不知道这部分是否有效,因为我一直遇到以下错误:

TypeError:错误#1009:无法访问空对象引用的属性或方法。 在WhiteBall$iinit()[/Users/Owner/Desktop/Animation/Coding/WhiteBall.as:13] 测试$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--;
        }
    }
    }
}
“测试”类中的第11行错误指的是这一行:

var whiteBall:WhiteBall = new WhiteBall ();

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

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

public function WhiteBall() 
{
   stage.addEventListener(KeyboardEvent.KEY_DOWN, keysdown);
} 
由于阶段为空,引发了错误。因此,要解决这个问题,最安全、最常见的方法是等到球被加入舞台,然后收听任何舞台键盘事件。像这样:

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);
}

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

Easy。您尝试访问白球构造函数中的stage。但是,此实例不属于显示列表,因此其阶段字段为空。你需要第一个addChild(whiteBall);在主类中,然后才尝试从球本身访问stage(这意味着您应该编写某种initBall()方法,并在将实例添加到显示列表后调用它)。下次我坐下来编写代码时,我会尝试一下,看看是否能让它正常工作。非常感谢您的帮助和清晰的解释!尝试使用
newwhiteball()而不是当前的
新白球()