Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Actionscript 3 Flash:Action Script 3.0:删除侦听器和gotoandplay帧时出现奇怪错误_Actionscript 3_Flash_Actionscript - Fatal编程技术网

Actionscript 3 Flash:Action Script 3.0:删除侦听器和gotoandplay帧时出现奇怪错误

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

我是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);
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);