Class 错误#1009 addChld()as3带循环
当我试着给我的班级增加孩子时,它说 “无法访问空对象引用的属性或方法。 在Main()上的类_obj()“错误#1009 我需要知道如何创建一个具有gameloop的类 对于碰撞之类的测试,请帮助 如果我没有eventlistener,请在对象上输入帧ir 但我需要循环的侦听器 主类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
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所说:“如果一个问题解决了你的问题,你应该接受它(点击绿色小鸟)“。这可能会避免浪费其他成员的时间。请在答案之间进行选择,并将其标记为已解决,或者如果这无法解决您的问题,请尝试更精确!谢谢。