Do you like my tutorials?

Then consider supporting me on Ko-fi

Talking about Actionscript 3 and Flash.

Every AS3 programmer uses event listeners to allow objects to become active and listen for specific instructions, such as a mouse click or the beginning of a new frame.

Now it’s time to see how can you create new events, but before entering into this script, let me say it’s not a “do it or die” feature.

You can always perform some if... then... else and achieve the same result, but from a PROgrammer point of view, a code with listeners is more readable than a complex list of conditions to check for events.

In this script, we are counting the time passed like in Understanding AS3 Timer Class, but we want to create a custom event to be triggered every 5 seconds.

Obviously in this case it’s quite pointless to create a custom event, but I am showing you the way you can do it.

This is the script:

package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.utils.Timer;
	import flash.text.TextField;
	public class dispatch extends Sprite {
		var dispatcher:time_dispatcher = new time_dispatcher();
		var time_count:Timer=new Timer(1000);
		var interval_timer:TextField = new TextField();   
		public function dispatch() {
			interval_timer.x=5;
			interval_timer.y=5;
			addChild(interval_timer);   
			time_count.addEventListener(TimerEvent.TIMER,show_time);
			dispatcher.addEventListener(time_dispatcher.ON_DIV_BY_FIVE, on_event_triggered);
			time_count.start();
		}
		private function on_event_triggered(event:Event):void {
			interval_timer.text="TRIGGERED";
		}
		function show_time(event:TimerEvent) {
			interval_timer.text=event.target.currentCount;
			dispatcher.check_division(event.target.currentCount);
		}
	}
}

import flash.events.EventDispatcher;
import flash.events.Event;
class time_dispatcher extends EventDispatcher {
	public static var ON_DIV_BY_FIVE:String="can be divided";
	public function check_division(num):void {
		if (num%5==0) {
			dispatchEvent(new Event(time_dispatcher.ON_DIV_BY_FIVE));
		}
	}
}

Line 8: Creating a new dispatcher, aggregating an instance of time_dispatcher class. I included the class in the same file to make the tutorial easier to understand, but you can obviously have your new class in another .as file as usual.

Line 16: This is where add the listener… as you can see it’s the same syntax you are used… except AS3 doesn’t have any ON_DIV_BY_FIVE listener.

The remaining lines are quite the same you’ve seen a thousand times, excluded line 24 where you can for check_division function that will trigger the event if the number of elapsed seconds can be divided by 5.

Line 35: This is how we fire, or dispatch, an event.

As I said, you can always use your if... then statement but in my opinion a code with listeners such as ON_LEVEL_COMPLETED is more readable than something like if(collected_items==total_items && time_left>0){...

This is the result of the script:

Download the source code, and next time I’ll show you how to develop a classic game with listeners.

Never miss an update! Subscribe, and I will bother you by email only when a new game or full source code comes out.