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

时间:2014-09-06 02:46:40

标签: 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);
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)
});

===========================================

我的游戏是点击食物。如果您收集1个汉堡和1个筹码,则移动到:完成水平的框架。如果计时器计数到0,将显示游戏框架。

奇怪的问题是关于舞台声明。如果我以这种方式重新排序语句:

stage.addEventListener(Event.ENTER_FRAME , movecity);
stage.addEventListener(Event.ENTER_FRAME , timerfunc);
stage.addEventListener(Event.ENTER_FRAME , burgerfall);

然后你收集汉堡和水平完整的框架显示。如果时间到零,则显示关于burgerfall()方法的错误1009 !!

如果我以这种方式重新排序语句:

stage.addEventListener(Event.ENTER_FRAME , movecity);
stage.addEventListener(Event.ENTER_FRAME , burgerfall);
stage.addEventListener(Event.ENTER_FRAME , timerfunc);

然后你收集汉堡,显示有关timerfunc()方法的错误1009!如果时间到零,则显示超时帧没有任何错误!

希望能理解这个问题。

1 个答案:

答案 0 :(得分:1)

有很多人发布了关于Null Object Reference Error的问题,我决定将链接粘贴到这里的教程。

Here it is

在绝大多数情况下很容易找到错误的确切原因。您应该尝试找到确切的代码行和至少为null的确切引用(即使您不理解为什么会发生这种情况)。然后,想要帮助你的人将花更少的时间猜测))

编辑:

至于你的代码......我认为没有特别需要在每个Enter_Frame事件上调用3种不同的方法。这是相同的游戏循环。