亞當史密斯的回答已經解釋了爲什麼你會得到「instance235」,所以我將解釋stage
對象的name
屬性等於null的解決方法。
您可以爲stage
對象創建包裝類,併爲該類提供一個名爲name
的屬性。包裝類也必須是EventDispatcher
的子類,以便您可以重寫它的addEventListener()
方法並更改其功能,以便隱式地將事件偵聽器添加到舞臺對象以及包裝器對象。解釋它的最好辦法是告訴你我做了一個例子:
package
{
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Main extends Sprite
{
private var _stageWrapper:StageWrapper;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}// end function
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
var stageWrapper:StageWrapper = new StageWrapper(stage, "stage");
stageWrapper.addEventListener(MouseEvent.CLICK, onStageWrapperClick);
}// end function
private function onStageWrapperClick(e:MouseEvent):void
{
trace(e.target.name) // output: stage
}// end function
}// end class
}// end package
import flash.display.Stage;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
internal class StageWrapper extends EventDispatcher
{
private var _stage:Stage;
private var _name:String;
private var _listener:Function;
public function get stage():Stage { return _stage }
public function get name():String { return _name }
public function StageWrapper(stage:Stage, name:String)
{
_stage = stage;
_name = name;
}// end function
override public function addEventListener(type:String,
listener:Function,
useCapture:Boolean = false,
priority:int = 0,
useWeakReference:Boolean = false):void
{
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
_stage.addEventListener(type, onStageEvent, useCapture, priority, useWeakReference);
}// end function
private function onStageEvent(e:Event):void
{
dispatchEvent(e);
}// end function
}// end class
個人而言,我不會用這種方法去,但這個是最好的答案我可以給你方向,你似乎要與去。
好的,我很抱歉... mcSlideHolder有1個孩子,那個「instance235」就是那個孩子。這是一個位圖對象... – haemse 2011-05-19 19:30:30
不是將目標顯示對象的name屬性的值與字符串值進行比較,而是將目標顯示對象直接與另一個顯示對象進行比較。例如,不是測試'e.target.name == null',而是測試'e.target == stage'。 – Taurayi 2011-05-19 20:22:44
重複的問題http://stackoverflow.com/questions/6062339/as3-click-event-added-to-stage-but-fires-when-clicking-on-a-movieclick – 2011-05-19 21:07:48