跳到主要內容

類別之間的傳值(2)

最近真的是腦子卡住了,寫過又忘記,重新溫習一下並弄個進階範例:

我們來新增三個類別:
1.main(主舞台 流程控管)
2.image1(舞台一)
3.GetSet(應該說分配器吧,訊息集散地之類的)

目的是我們把物件新增在(舞台一)中,再把(舞台一)叫到(main主舞台)統一控管,當按下(舞台一按鈕)後,會傳送事件到(GetSet)。因為接收到按鈕事件的地方是(舞台一)(可以寫到很裡面裡面,透過GetSet也能讓主舞台知道事件已被傳送或啟動)。好處是可以讓主舞台看起來比較乾淨而且流程清楚,當然也不會讓你腦子卡住。

Main(主舞台)
  package
{
 import flash.display.MovieClip;
 import flash.display.Sprite;
 import Stage1.image_1;
 import GS.GetSet;
 import flash.events.Event;
 /**
  * ...
  * @author EGG
  */
 public class Main extends Sprite 
 {
  private var game_stage1:image_1 = new image_1();
  private var _GetSet:GetSet = GetSet.getInstance();
  
  public function Main() 
  {
   addChild(game_stage1);
   _GetSet.addEventListener(GetSet.MouseTouchBookID , testID);
  }
  
  private function testID(e:Event):void
  {
   trace("OK");
  }
  
 }
 
}
image1(舞台一)
package  Stage1
{
 import flash.display.MovieClip;
 import flash.display.Sprite;
 import flash.display.Loader;
 import flash.net.URLRequest;
 import GS.GetSet;

 import flash.events.*;
 /**
  * ...
  * @author egg
  */
 public class image_1 extends Sprite
 {
  private var urlReq:URLRequest = new URLRequest("image/pic01.jpg");
  private var ldr:Loader = new Loader();
  private var page1_draw1:MovieClip = new page1_draw_1();
  private var _GetSet:GetSet = GetSet.getInstance();

  public function image_1() 
  {
   ldr.load(urlReq);
   addChild(ldr);
 
   addChild(page1_draw1);
   page1_draw1.x = 536;
   page1_draw1.y = 109;
   page1_draw1.addEventListener(MouseEvent.MOUSE_DOWN, draw1PressDown);
  }
  
  private function draw1PressDown(e:MouseEvent):void
  {
   _GetSet.SentMouseTouchBookID();
  }

 }

}
GetSet(事件處理區)
package GS 
{
 import flash.events.Event;
 import flash.events.EventDispatcher;
 /**
  * ...
  * @author egg
  */
 public class GetSet extends EventDispatcher
 {
  //---------------passEvnet
  public static const MouseTouchBookID:String = "MouseTouchBookID";

  private static var _instance:GetSet;
  
  public function GetSet(pSingle:SingletonError) :void
  {
   if (SingletonError == null) throw new Error("SingletonError");
  }
  
  public static function getInstance():GetSet 
   
  {
   if (GetSet._instance == null) {
    GetSet._instance = new GetSet(new SingletonError());
   }
   return GetSet._instance;
  }
  //---------------passEvnet
  public function SentMouseTouchBookID():void {
   this.dispatchEvent(new Event(MouseTouchBookID));
  }
 }

}
class SingletonError{}
要點一:在舞台一裡面新增一個滑鼠事件並當按下時傳送(_GetSet.SentMouseTouchBookID();)在GetSet中已經設定好的事件名稱。

要點二:我們要在最上層收到事件是否已觸發就必須新增GetSet中的(SentMouseTouchBookID)事件在程式中。

留言