" TypeError:错误#1009:无法访问空对象引用的属性或方法"同时使用gotoAndplay功能

时间:2014-12-31 11:27:43

标签: actionscript-3 flash

我试图为我的游戏添加一个带有重启按钮的游戏画面。我在第22帧放置了重启按钮。当我的玩家死亡时,它进入第22帧并且我能够重启游戏单击按钮,但此消息在输出区域中循环。请帮助我如何纠正此问题。

当我删除行

时,问题不存在
  

的gotoAndPlay(22);

在第17帧,但如果没有,我将无法获得所需的功能。

请在下面找到我的代码

第17帧 - 游戏代码

stop();

import flash.events.Event;
import flash.events.MouseEvent;

var mouseIsDown = false; 
var speed = 0; 
var score = 0; 

addEventListener(Event.ENTER_FRAME,mainLoop);

stage.addEventListener(MouseEvent.MOUSE_DOWN,clicked);
stage.addEventListener(MouseEvent.MOUSE_UP,unclicked);

function clicked(m:MouseEvent)
{
    mouseIsDown = true;
}

function unclicked(m:MouseEvent)
{
    mouseIsDown = false;
}

function mainLoop(e:Event)
{
    score = score + 10;

    output.text = "Score: "+score;

    if(mouseIsDown)
    {
        speed -= 2;
    }
    else
    {
        speed+=2;
    }

    if(speed > 10) speed = 10;
    if(speed < -10) speed = -10;

    player.y += speed;

    for(var i = 0; i < numChildren; i++)
    {
        if (getChildAt(i) is Cloud || getChildAt(i) is Boundary)
            {
                var b = getChildAt(i) as MovieClip;         

                if(b.hitTestObject(player))
                {
                    for(var counter = 0; counter < 12; counter++)
                    {
                        var boom = new Boom();
                        boom.x = player.x;
                        boom.y = player.y;
                        boom.rotation = Math.random() * 360;
                        boom.scaleX = boom.scaleY = 0.5 + Math.random();
                        addChild(boom);
                    }

                    player.visible = false;

                    removeEventListener(Event.ENTER_FRAME,mainLoop);
                    gotoAndPlay(22);
                }
            }
    }
}

在第22帧 - 重新启动屏幕

stop();
import flash.events.MouseEvent;

foutput.text = "Score: "+ fscore;

btn_playagain.addEventListener(MouseEvent.CLICK, playagain);

function playagain(m:MouseEvent)
{
    gotoAndPlay(17);
}

btnback3.addEventListener(MouseEvent.CLICK, backMain3);

function backMain3(m:MouseEvent)
{
    gotoAndPlay(1);
}

在第1帧 - 主菜单屏幕

stop();

import flash.events.MouseEvent;
import flash.system.fscommand;

btnnewgame.addEventListener(MouseEvent.CLICK, newGame);

function newGame(m:MouseEvent)
{
    gotoAndPlay(17);
}

btnins.addEventListener(MouseEvent.CLICK, instruct);

function instruct(m:MouseEvent)
{
    gotoAndPlay(6);
}

btncredits.addEventListener(MouseEvent.CLICK, credits);

function credits(m:MouseEvent)
{
    gotoAndPlay(11);
}

btnexit.addEventListener(MouseEvent.CLICK, exitfunc);

function exitfunc(m:MouseEvent)
{
    fscommand("quit");
}

第6帧 - 说明屏幕

stop();

btnback1.addEventListener(MouseEvent.CLICK, backMain1);

function backMain1(m:MouseEvent)
{
    gotoAndPlay(1);
}

第11帧 - 积分屏幕

stop();

btnback2.addEventListener(MouseEvent.CLICK, backMain2);

function backMain2(m:MouseEvent)
{
    gotoAndPlay(1);
}

1 个答案:

答案 0 :(得分:1)

该错误意味着您正在尝试在空对象上调用方法,这意味着您在第22帧上使用的对象之一实际上并不存在。

违规变量的可能候选者是foutputbtn_playagainbtnback3。检查以确保它们位于第22帧的舞台上,拼写正确。

你在第17帧使用output.text,你确定它应该在第22帧foutput.text吗?