当我尝试添加我的课时,它说 "无法访问空对象引用的属性或方法。 在Main()"的class_obj()错误#1009
我需要知道如何拥有一个带有游戏循环的课程 对于像碰撞和东西这样的测试,请帮助!
如果我没有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");
}
}
}
答案 0 :(得分:2)
如果您对舞台对象有一些引用,为了避免循环中出现任何问题,我认为@Pawel在他说“#34;你需要先听一下”时是对的:
Event.ADDED_TO_STAGE
赞成Pawel!
每个班级名称应该以他所说的大写字母开头,当你不再需要它时,删除一个事件监听器是一个很好的做法。
所以你的课程应该是:
主要:
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]
...
[编辑]以下是了解ADDED和ADDED_TO_STAGE的有用链接:
http://fromzerotoas3hero.blogspot.be/2011/03/added-vs-addedtostage.html
[/编辑]
答案 1 :(得分:1)
您可能无法访问舞台(这只是您使用的对象,因此其他任何内容都无法显示为空。
你需要先听取
Event.ADDED_TO_STAGE
因为movieclip在添加到显示列表之前无法访问舞台。
修改强>
在您的简单情况下,您不需要使用使用阶段对象。您可以在class_object实例本身上侦听frame事件:
this.addEventListener(Event.ENTER_FRAME, loop);