简体   繁体   中英

As3 flash error “Cannot access a property or method of a null object reference”

I came up with this error when testing my movie

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at ACTUALPROJECT_fla::MainTimeline/youLose()[ACTUALPROJECT_fla.MainTimeline::frame3:112]
    at ACTUALPROJECT_fla::MainTimeline/SharkEat()[ACTUALPROJECT_fla.MainTimeline::frame3:87]

this is my code

import flash.events.MouseEvent;
import flash.events.Event;
import flash.events.*;
import flash.utils.Timer;

var rectangle:Rectangle = new Rectangle(0,345,600,455);

turtle_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
turtle_mc.addEventListener(MouseEvent.MOUSE_UP, dropObject);
turtle_mc.addEventListener(Event.ENTER_FRAME, handleCollision);
turtle_mc.addEventListener(Event.ENTER_FRAME, handleCollision2);
turtle_mc.addEventListener(Event.ENTER_FRAME, handleCollision4);
turtle_mc.addEventListener(Event.ENTER_FRAME, SharkEat);
turtle_mc.buttonMode = true;
turtle_mc.originalY = turtle_mc.y;
turtle_mc.originalX = turtle_mc.x;

function resetTurtlePosition()
{
    turtle_mc.y = turtle_mc.originalY;
    turtle_mc.x = turtle_mc.originalX;
}

function pickupObject(event:MouseEvent):void
{
    event.target.startDrag(false, rectangle);
}

function dropObject(event:MouseEvent):void
{
    event.target.stopDrag();
}


function handleCollision(e:Event):void
{


    if (plasticBag_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false))
    {

        youLose();

    }
    else
    {

    }
}
function handleCollision2(e:Event):void
{


    if (fishingBoat_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false))
    {

        youLose();

    }
    else
    {

    }
}
function handleCollision4(e:Event):void
{


    if (oilSpillBoat_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false))
    {

        youLose();

    }
    else
    {

    }
}
function SharkEat(e:Event):void
{


    if (shark_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false))
    {

        **youLose();**

    }
    else
    {

    }
}
var nCount:Number = 0;
var myScore:Timer = new Timer(10,nCount);
counter_txt.text = nCount.toString();
myScore.start();
myScore.addEventListener(TimerEvent.TIMER, countdown);
function countdown(e:TimerEvent):void
{
    nCount++;
    counter_txt.text = nCount.toString();

}

function youLose():void
{
    myScore.stop();
    turtle_mc.stopDrag();
    resetTurtlePosition();
    **this.storedtxt = counter_txt.text;**
    gotoAndStop(3,"PlayTheGame");
}

i have marked the two lines with asterix. I'm new to flash and Action Script-3, can anyone help me out?

After re-verifying your code, I think that your error is coming from this line :

gotoAndStop(3,"PlayTheGame");

because the EnterFrame event on your turtle_mc object is still being fired even after going to the 3rd frame of your PlayTheGame scene, and that's why you got that error because some objects used in your EnterFrame event handlers doesn't exist in that frame.

So to avoid that, you can do like this :

// you should know that you can use a single handler to handle all collisions

turtle_mc.addEventListener(Event.ENTER_FRAME, handleCollision);

function handleCollision(e:Event):void
{
    if (        
        plasticBag_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false) ||
        fishingBoat_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false) ||
        oilSpillBoat_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false) ||
        shark_mc.hitTestPoint(turtle_mc.x,turtle_mc.y,false))       
    {
        youLose();
    }
    else {}
}

then in your youLose() function, you should remove the Event.ENTER_FRAME event listener before going to the other scene :

function youLose():void
{
    // ...

    turtle_mc.removeEventListener(Event.ENTER_FRAME, handleCollision);

    gotoAndStop(3, 'PlayTheGame');
}

Hope that can help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM