Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 错误#1009 addChld()as3带循环_Class_Loops_Actionscript 3_Game Loop - Fatal编程技术网

Class 错误#1009 addChld()as3带循环

Class 错误#1009 addChld()as3带循环,class,loops,actionscript-3,game-loop,Class,Loops,Actionscript 3,Game Loop,当我试着给我的班级增加孩子时,它说 “无法访问空对象引用的属性或方法。 在Main()上的类_obj()“错误#1009 我需要知道如何创建一个具有gameloop的类 对于碰撞之类的测试,请帮助 如果我没有eventlistener,请在对象上输入帧ir 但我需要循环的侦听器 主类 package { import flash.display.MovieClip; import flash.events.Event; public class Main extends

当我试着给我的班级增加孩子时,它说 “无法访问空对象引用的属性或方法。 在Main()上的类_obj()“错误#1009

我需要知道如何创建一个具有gameloop的类 对于碰撞之类的测试,请帮助

如果我没有eventlistener,请在对象上输入帧ir 但我需要循环的侦听器

主类

package
{
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Main extends MovieClip
    {
        var mc:class_obj;

        public function Main()
        {
            //constructor
            mc = new class_obj();
            addChild(mc);
        }
    }
}
对象类

package  
{

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

    public class class_obj extends MovieClip 
    {

        public function class_obj() 
        {
            // constructor code
            stage.addEventListener(Event.ENTER_FRAME, loop);
        }
        public function loop(e:Event)
        {
            trace("LOOPED CLASS");
        }
    }
}

您可能无法访问stage(这是您使用的唯一对象,因此其他对象显然不能为null)

你需要先听一听

Event.ADDED_TO_STAGE
因为movieclip在添加到显示列表之前无法访问stage

编辑

在您的简单情况下,事件不需要使用阶段对象。您可以在类\对象实例本身上侦听帧事件:

this.addEventListener(Event.ENTER_FRAME, loop);

为了避免在循环中出现任何问题,如果您对Stage对象有一些引用,我认为@Pawel说“您需要首先聆听:

Event.ADDED_TO_STAGE
所以,请投票给帕维尔

正如他所说的,每个类名都应该以大写字母开头,当您不再需要事件侦听器时,删除它是一种很好的做法

所以你的课程应该是:

主要内容:

package {
    import flash.display.MovieClip;
    import flash.events.Event;
    import ClassObj;

    public class Main extends MovieClip {

        var mc:ClassObj;

        public function Main() {
            this.addEventListener(Event.ADDED_TO_STAGE,addClip);
        }

        private function addClip(e:Event):void {
            trace("Class Main instance is added to : " + this.parent);
            mc = new ClassObj();
            addChild(mc);
            e.target.removeEventListener(Event.ADDED_TO_STAGE,addClip);
            trace(this + "hasEventListener(Event.ADDED_TO_STAGE) = " + e.target.hasEventListener(Event.ADDED_TO_STAGE));
        }
    }

}
和ClassObj:

package {
    import flash.display.MovieClip;
    import flash.events.Event;

    public class ClassObj extends MovieClip {

        public function ClassObj() {
            this.addEventListener(Event.ADDED_TO_STAGE,checkClip);
        }

        private function checkClip(e:Event):void{
            trace("ClassObj instance is added to : " + this.parent);
            this.addEventListener(Event.ENTER_FRAME, loop);
            e.target.removeEventListener(Event.ADDED_TO_STAGE,checkClip);
            trace(this + "hasEventListener(Event.ADDED_TO_STAGE) = " + e.target.hasEventListener(Event.ADDED_TO_STAGE));
        }

        private function loop(e:Event):void{
             trace("LOOPED CLASS Stage is : " + e.target.stage);
             trace("LOOPED CLASS parent is : " + e.target.parent);
        }
    }

}
输出将是:

Class Main instance is added to : [object Stage]
ClassObj instance is added to : [object Main]
[object ClassObj]hasEventListener(Event.ADDED_TO_STAGE) = false
[object Main]hasEventListener(Event.ADDED_TO_STAGE) = false
LOOPED CLASS Stage is : [object Stage]
LOOPED CLASS parent is : [object Main]
LOOPED CLASS Stage is : [object Stage]
LOOPED CLASS parent is : [object Main]

[编辑]这里有一个有用的链接,可以帮助您了解添加的和添加到\u阶段的\u:


[/EDIT]

还请注意,在AS3中,我们使用类名称-
ClassObj
优于
classob
j,因此很容易区分我们处理的是什么类型的属性。谢谢!!!我已经尝试了很长一段时间了。既然你说它似乎很明显,你应该接受一个问题,如果它解决了你的问题(点击绿色小鸟)让其他人可以看到它被解决了,并享受绿色数字的计算;)@Indy仅供参考,如果可能,请尝试修复文章的其他方面,如果建议编辑或删除文档链接。您考虑过将其放入文档中吗?没有
ADDED\u to\u STAGE
Example现在Adobe网站上已禁用评论。@Pawel但是您可能会在web上找到许多关于ADDED\u to\u STAGE的文档Paweł这里有一个简短的例子(理解这两个事件既简短又有效)。@Nautis正如Pawel所说:“如果一个问题解决了你的问题,你应该接受它(点击绿色小鸟)“。这可能会避免浪费其他成员的时间。请在答案之间进行选择,并将其标记为已解决,或者如果这无法解决您的问题,请尝试更精确!谢谢。