Actionscript 3 Flash:Action Script 3.0:删除侦听器和gotoandplay帧时出现奇怪错误
我是AS3的新手。我找了很多遍我的错误,但都没有找到答案 首先,这是我的代码:Actionscript 3 Flash:Action Script 3.0:删除侦听器和gotoandplay帧时出现奇怪错误,actionscript-3,flash,actionscript,Actionscript 3,Flash,Actionscript,我是AS3的新手。我找了很多遍我的错误,但都没有找到答案 首先,这是我的代码: this.stage.scaleMode = StageScaleMode.EXACT_FIT; this.stage.align = StageAlign.TOP_LEFT; stop(); stage.addEventListener(Event.ENTER_FRAME , movecity); stage.addEventListener(Event.ENTER_FRAME , timerfunc); s
this.stage.scaleMode = StageScaleMode.EXACT_FIT;
this.stage.align = StageAlign.TOP_LEFT;
stop();
stage.addEventListener(Event.ENTER_FRAME , movecity);
stage.addEventListener(Event.ENTER_FRAME , timerfunc);
stage.addEventListener(Event.ENTER_FRAME , burgerfall);
var g:Number = 0 ;
var now:Number = 5;
var chips_no:int = 0 ;
var burger_no:int = 0;
function movecity(event:Event):void {
city.x = city.x - 3 ;
if(city.x <= -498 ){
city.x = 993;
}
}
function ontouch(event:MouseEvent , my:MovieClip){
my.y = (140 + (400 - 140) * Math.random())* (-1);
my.x = (60 + (400 - 60) * Math.random());
g=10;
if(my.name=="chips"){
chips_no +=1;
}
if(my.name=="burger"){
burger_no +=1;
}
if(my.name=="burger2"){
burger_no +=1;
}
}
function burgerfall(event:Event){
if(burger_no==1 && chips_no==1){
return stage.removeEventListener(Event.ENTER_FRAME, burgerfall),
stage.removeEventListener(Event.ENTER_FRAME, movecity),
stage.removeEventListener(Event.ENTER_FRAME, timerfunc),
gotoAndPlay(215);
}
g = g + 14;
burger.rotation += 20 ;
burger2.rotation += 25;
chips.rotation +=15;
burger.y = burger.y + g;
burger2.y = burger2.y + g;
chips.y = chips.y + g;
/////////////////// chips relocate
if(chips.y >=1730){
chips.y = -500 ;
g = 0.3 ;
if(chips.x <=240){
chips.x += Math.random()*400 ;
}else{
chips.x -= Math.random()*400 ;
}
}
// ///////////////// burger relocate
if(burger.y >= 1130){
burger.y = -109 ;
g = 0.3 ;
if(burger.x <=240){
burger.x += Math.random()*400 ;
}else{
burger.x -= Math.random()*400 ;
}
}
// ///////////////////// burger 2 relocate
if(burger2.y <= 1250){
burger2.y = -365 ;
g=0.3;
if(burger2.x <=240){
burger2.x += Math.random()*400 ;
}else{
burger2.x -= Math.random()*400 ;
}
}
}
function timerfunc(event:Event):void {
timer_text.text = String(int(now));
now-=0.05;
if(now <= 0){
stage.removeEventListener(Event.ENTER_FRAME , movecity);
stage.removeEventListener(Event.ENTER_FRAME , timerfunc);
stage.removeEventListener(Event.ENTER_FRAME , burgerfall);
gotoAndPlay(215);
}
}
burger2.addEventListener(MouseEvent.CLICK , function(me:MouseEvent):void {
ontouch(me, burger2)
});
burger.addEventListener(MouseEvent.CLICK , function(me:MouseEvent):void {
ontouch(me, burger)
});
chips.addEventListener(MouseEvent.CLICK , function(me:MouseEvent):void {
ontouch(me, chips)
});
然后你们收集汉堡,并将整个框架水平显示出来。如果时间为零,则显示有关burgerfall()方法的错误1009
如果我以这种方式重新排列语句:
stage.addEventListener(Event.ENTER_FRAME , movecity);
stage.addEventListener(Event.ENTER_FRAME , burgerfall);
stage.addEventListener(Event.ENTER_FRAME , timerfunc);
然后收集汉堡,错误1009显示关于timerfunc()方法!如果时间为零,则显示的超时帧没有任何错误
希望您能理解这个问题。有太多人提出关于空对象引用错误的问题,所以我决定将链接粘贴到教程中 在绝大多数情况下,很容易找到错误的确切原因。至少,您应该尝试找到精确的代码行和精确的空引用(即使您不理解为什么会发生这种情况)。这样,想帮助你的人就不会花那么多时间猜测了 编辑:
至于你的代码。。。我认为没有必要在每个Enter\u Frame事件中调用3种不同的方法。这是相同的游戏循环。如果同时删除所有三个enter frame侦听器,那么创建三个侦听器就没有意义了。为什么不创建一个函数作为enterframe事件监听器的事件处理程序呢。如果您在不同的时间删除侦听器,那么有三个不同的侦听器处理程序是有意义的。哇,好主意!我不知道为什么我做了不止一个监听器,我只是用一个函数来安排所有函数,每件事情都很好,非常感谢@SlyRaskalWow,好主意!我不知道为什么我做了不止一个监听器,我只是用一个函数来安排所有函数,每件事情都很好,非常感谢!
stage.addEventListener(Event.ENTER_FRAME , movecity);
stage.addEventListener(Event.ENTER_FRAME , burgerfall);
stage.addEventListener(Event.ENTER_FRAME , timerfunc);