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.