我在幾篇文章和做題一直在尋找各地去上究竟是什麼,我跟我的項目經歷的把握,但還沒有找到答案。事件監聽器不工作的主要雪碧AS3
我創建作爲我的根這個特定的項目主精靈(我用的術語,因爲我現在明白了。如果我在錯誤請指正)。在那個精靈類中,我添加了一個MouseEvent偵聽器,以便我可以用鼠標以某種方式操作。問題是,主Sprite的行爲好像不能讀取我的鼠標事件,或者它沒有大小,因此無法註冊鼠標事件。這裏是我的課程和我已經完成的測試。
============
Main Class =
============
package
{
import flash.display.Sprite;
import Fu;
[SWF(backgroundColor = "0xffffff", width = "550", height = "400")]
public class Main extends Fu
{
public function Main():void
{
super();
addMouseListener();
}
}
}
==========
Fu Class =
==========
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Fu extends Sprite
{
private var display_height:uint;
private var display_width:uint;
private var default_background_color:uint;
public function Fu(display_height:uint = 400, display_width:uint = 550, default_background_color:uint = 0x2e2e2e)
{
this.display_height = display_height;
this.display_width = display_width;
this.default_background_color = default_background_color;
if (stage) {
init();
}
else {
addEventListener(Event.ADDED_TO_STAGE, init);
}
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
graphics.beginFill(default_background_color, 1);
graphics.drawRect(0, 0, display_width, display_height);
}
public function addMouseListener():void {
trace("Added Mouse Listeners");
addEventListener(MouseEvent.CLICK, onMouseEvent);
// Also tried MouseEvent.MOUSE_OVER, MouseEvent.ROLL_OVER
// with no results either.
}
private function onMouseEvent(e:Event):void {
trace("Mouse Event Fired.");
}
}
}
一切編譯確定,直到我嘗試激活的MouseEvent如點擊,在這種情況下,沒有什麼是輸出到控制檯上運行得很好。
================
Console Output =
================
Added Mouse Listeners
//Event messages should appear here...
如果我再添加第二個精靈(S)與下面的代碼的主類...
===========================
Added to Main constructor =
===========================
var s:Sprite = new Sprite();
s.name = "s";
s.graphics.beginFill(0x000000);
s.graphics.drawRect(0, 0, 200, 200);
addChild(s);
,並點擊的I得到「鼠標觸發的事件。」在控制檯窗口中,但不是當我點擊s'200x200框外。
我也嘗試添加聽者階段(這是不是最好我想要的東西,因爲我想這些聽衆隻影響這個特定的SWF文件的主Sprite),並描繪出...
trace(e.target, " ", (e.target as DisplayObject).name);
當s被點擊時,在控制檯和「[object Sprite] s」中未被sprite s覆蓋的區域顯示「[object Stage] null」。
一個明顯的解決方法是使用s作爲我的「舞臺」並稱它爲一天,但我很好奇爲什麼事件監聽器不能在主sprite上工作,並且爲什麼它沒有像其他sprites一樣的默認實例名稱做。
任何想法?
嗯。代碼似乎很好。檢查你的'Main'是否將'mouseEnabled'設置爲true。如果它是假的,它會解釋顯示的行爲。 – Vesper
是你在'init'中繪製的矩形嗎? –
@Vesper我剛剛檢查並將mouseEnabled設置爲true。 – MrJman006