Reputation: 13
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?
Upvotes: 1
Views: 1031
Reputation: 9839
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.
Upvotes: 1