how to fix error 1009 in as3 - actionscript-3

hi i have been searhing the net for hours and have not found a solution to my problem and i have no idea how to fix it as i am only new to flash so if you know anything that might help me just comment below please all help is greatly appreciated
so here is the code
Quit.addEventListener(MouseEvent.CLICK, func2);
function func2(event:MouseEvent):void
{
gotoAndStop(2);
}
Help.addEventListener(MouseEvent.CLICK, func4);
function func4(event:MouseEvent):void
{
gotoAndStop(4);
}
var myTimer:Timer = new Timer(2000,0);
myTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener(e:TimerEvent):void {
Hungry_bar.scaleX-=0.05;
if(Hungry_bar.scaleX<=0.05){
gotoAndStop(12)
}
}
myTimer.start();
var myTimer2:Timer = new Timer(3000,0);
myTimer.addEventListener(TimerEvent.TIMER, timerListener2);
function timerListener2(e:TimerEvent):void {
Fun_bar.scaleX-=0.05;
if(Fun_bar.scaleX<=0.05){
gotoAndStop(13)
}
}
myTimer2.start();
Feed.addEventListener(MouseEvent.CLICK,feed)
function feed(e:MouseEvent){
Hungry_bar.scaleX+=0.05
if(Hungry_bar.scaleX>=1.5){
gotoAndStop(14)
}
}
Fun.addEventListener(MouseEvent.CLICK,happy)
function happy(e:MouseEvent){
Fun_bar.scaleX+=0.05
if(Fun_bar.scaleX>=1.5){
gotoAndStop(15)
}
}
And here is the error
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at petgame_fla::MainTimeline/timerListener()[petgame_fla.MainTimeline::frame5:19]
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at petgame_fla::MainTimeline/timerListener2()[petgame_fla.MainTimeline::frame5:29]
at flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()

You use gotoAndStop() to move off a frame, in the meantime you have timers that refer to objects that do not exist on other frames than your current frame (5). gotoAndStop() triggers destruction of previously current frame, thus, once you go to another frame, your Hungry_bar becomes void, but timers still tick, because they are frame independent, and when they trigger the timer event, your functions assume that your MC's components are there while they no longer are in place. You should stop the timers and remove their listeners when you change the frame via gotoAndStop().

Related

How to fix 'TypeError: Error #1009' error in ActionScript3.0 Adobe Animate

I'm setting up a button on the first frame which when clicked will transfer the user to the 2nd frame using this code:
stop();
Btn_1.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndPlayFromFrame_2);
function fl_ClickToGoToAndPlayFromFrame_2(event:MouseEvent):void
{
gotoAndPlay(2);
}
and on the second frame, I set up a dynamic text that will perform a countdown using this code:
var myTimer:Timer = new Timer(1000,60); // every second for 60 seconds
myTimer.addEventListener(TimerEvent.TIMER, onTimer);
myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onComplete);
myTimer.start();
function onTimer(e: TimerEvent):void {
countdown_text.text = String(myTimer.repeatCount - myTimer.currentCount);
}
function onComplete(e: TimerEvent):void{
gotoAndStop(3);
}
the thing is keep getting TypeError: Error #1009 message after debugging it. I know the fault is in line 7 of the 2nd code but I have no idea what is wrong with it. Pls help!
I should see your source fla, but it is most likely related to countdown_text not being accessible in that frame. Error description is "Cannot access a property or method of a null object reference", that means it cannot find the reference which is "countdown_text".
It is very very bad practice to write AS directly in frames. Convert code into a class and assign it as a document class.
You can find Adobe documentation for document class here: https://helpx.adobe.com/animate/using/actionscript-publish-settings.html

as3 - Error #1009, an object is null and bugged with timer

When the player touches the door, the next level is supposed to be added and the previous level should be removed. However in the game, the next level does get added and everything works, but the output shows this issue.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.utils::Timer/tick()
This is the enterframe:
if (player.collisionArea.hitTestObject(door0))
{
var timer: Timer = new Timer(1000, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, fade);
timer.reset();
timer.start();
}
This is the timer:
function fade(event: TimerEvent)
{
removeEventListener(TimerEvent.TIMER_COMPLETE, fade);
var pageTwo: PageTwo = new PageTwo;
parent.addChild(pageTwo);
this.parent.removeChild(this);
}
This is in the "previous level" class. "this" is itself (previous level) and "pageTwo" is (next level).
So, the output indicates the error is at "parent.addChild(pageTwo);". However if I remove that, the output indicates the issue is from "this.parent.removeChild(this);
I assume it's because the child is removed that's why there is a null issue. But how do I solve this error coming from the output? Am I removing the movieclip the wrong way?
Your problem is coming from this line :
parent.addChild(pageTwo);
because in your code as this condition
if (player.collisionArea.hitTestObject(door0))
is true, you will create another Timer object which when its TimerEvent.TIMER_COMPLETE event is fired, it will try to add a new PageTwo instance to a null parent and that's why the error is fired.
So to avoid that, you can remove the Event.ENTER_FRAME event listener at the first time when that condition is true or if you still need it (the Event.ENTER_FRAME event listener) you have to verify your condition to avoid such behavior.
Also, your timer var should be declared as global to be accessible from the fade() function to be able to remove its TimerEvent.TIMER_COMPLETE event listener which you are trying to remove from your current object.
Hope that can help.

AS3 null-object reference

So heres the code:
function playSound():void
{
var channel:SoundChannel = sound.play();
channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
}
function onComplete(event:Event):void
{
SoundChannel(event.target).removeEventListener(event.type, onComplete);
playSound();
}
I get the error on channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
but I dont get it at the start, as a game runs for some time without the error, so Im suggesting theres a problem in a onComplete function or an event listener, however, all I tried had failed and Im stuck here for some time now.
I just decided to post it here and see if anybody can see the problem.
Thanks in advance!
EDIT:
Sorry I havent included this right away.
Error:
TypeError: Error #1009: Cannot access a property or method of a null
object reference. at
projectSnowFlake_fla::MainTimeline/playSound()[projectSnowFlake_fla.MainTimeline::frame1:275]
at
projectSnowFlake_fla::MainTimeline/playGame()[projectSnowFlake_fla.MainTimeline::frame1:269]
at
projectSnowFlake_fla::MainTimeline/gameLoop()[projectSnowFlake_fla.MainTimeline::frame1:156]
[UnloadSWF] projectSnowFlake.swf Test Movie terminated.
And heres the sound :
var sound:Sound = new MainSound();
I read your code, the only potentially issue is sound variable, can be null.
Have you instantiated sound variable?
If sound is valued, the method play (of variable sound) can return a null value?
EDIT AFTER COMMENTS:
Hi, view this and this issue

actionscript error?

I have a problem, this works then at the " and" it dies and gives me an error
TypeError: Error #1009: Cannot access
a property or method of a null object
reference. at
Untitled_fla::MainTimeline/frameLooper()
at
flash.utils::Timer/_timerDispatch()
at flash.utils::Timer/tick()
CODE
var string:String = "Welcome to PuppetWeb Inc\nMy name is Steve and I will be your host for this presentation!\n...\nOkay I think it is ready, let's go!";
var myArray:Array = string.split("");
var timer : Timer = new Timer (100, myArray.length);
timer.addEventListener (TimerEvent.TIMER, frameLooper);
timer.start();
function frameLooper(event:Event):void {
if(myArray.length > 0) {
text1.appendText(myArray.shift());
}else{
removeEventListener(Event.ENTER_FRAME, frameLooper);
}
}
It works for the start and then just dies at and, and then it shows that error about 50 times and restarts.
Any help?
I assume this is code written on a keyframe in the timeline, so my guess would be that your textfield goes away for some reason, most likely a keyframe animation of some kind.
It's also somewhat odd that you are removing an Event.ENTER_FRAME listener when the array is empty and not the TimerEvent.TIMER
At the end, you're trying to remove the listener from an implicit "this". Your statement is equivalent to:
this.removeEventListener(Event.ENTER_FRAME, frameLooper);
But "this" is a reference to the main timeline (if this is a frame script on the main timeline) or a reference to the instance that contains this code. It's not a reference to the Timer instance, which is what you need:
event.target.removeEventListener(TimerEvent.TIMER, frameLooper);
Why not use string.charAt()?
var string:String = "Welcome to PuppetWeb Inc\nMy name is Steve and I will be your host for this presentation!\n...\nOkay I think it is ready, let's go!";
var timer : Timer = new Timer (100, string.length);
timer.addEventListener (TimerEvent.TIMER, frameLooper);
timer.start();
function frameLooper(event:TimerEvent):void {
text1.appendText(string.charAt (event.target.currentCount-1);
}
Among all the other issues Stated in the other posts you are not stopping the time.
Dont forget timer.stop( );

External SWF Loading problem

I have an SWF loading in an SWF containing a papervision scene.
I've done it before yet problem is, I get an error - I'm not sure what the issue really is.
private function downloadSWF(url:String):void
{
trace(url);
var urlRequest:URLRequest = new URLRequest(url);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loaderProgressEventHandler);
loader.load(urlRequest);
}
private function loaderProgressEventHandler(ev:ProgressEvent):void
{
loader.preloaderCircle.percent = ev.bytesLoaded / ev.bytesTotal;
}
When the application runs the code - I get the error:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.dehash.pv3d.examples.physics::WowDemo()
Why am I getting this if the loading hasn't even complete yet?
Thanks in advance guys.
Edit: Try a blank child swf, see if the other one was trying access something in the parent. – Jorge
I did this, it seems, even with a simple SWF with a mouse click listener causes the Error:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at simple_fla::MainTimeline/frame1()
My code for that is:
import flash.events.MouseEvent;
this.stage.addEventListener(MouseEvent.CLICK, onClick);
function onClick(ev:MouseEvent):void
{
trace("MouseClick");
}
Am I missing something blatantly obvious??
The problem is that the loaded swf starts running without it being added to the stage. So stage is null, resulting in that error.
The second example with the addedToStageEventHandler works because there stage is only referenced after the object was added to the stage, so stage is not null anymore.
A possible solution for the first error is adding the loader to the stage. That way, when the swf is loaded and starts, it already has a stage reference.
It won't even load if there's an error. You're accessing an unreferenced object on the WowDemo() class...did you instantiate correctly the class?
this seems to work inside my child SWF:
this.addEventListener(Event.ADDED_TO_STAGE, addedToStageEventHandler);
function onClick(ev:MouseEvent):void
{
trace("MouseClick");
var event:Event = new Event("END", true, false);
this.dispatchEvent(event);
}
function addedToStageEventHandler(ev:Event):void
{
this.stage.addEventListener(MouseEvent.CLICK, onClick);
}
does anyone know Why?