WEB开发网
开发学院图形图像Flash Understanding AS3 custom events 阅读

Understanding AS3 custom events

 2009-10-21 00:00:00 来源:WEB开发网   
核心提示: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 ne

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:

本文示例源代码或素材下载

Tags:Understanding AS custom

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接