讓本身及子系物件滑鼠事件失效

Flash

延伸之前Flash AS3.0 組件(Component)實做所產生的新問題,當自定滑鼠游標仍未消失前,如果使用者按下滑鼠,事件會被自訂游標抓走,所有在自訂游標之下的物件全都吃不到滑鼠事件,除非等到游標消失。
解決方法就是讓自訂游標不要接收任何滑鼠事件,找了一下文件後發現了Sprite有兩個屬性:
  • mouseEnabled : Boolean:會指定這個物件是否會收到滑鼠訊息。預設值為 true。
  • mouseChildren : Boolean:判斷物件的子系是否支援啟用滑鼠。 如果物件支援啟用滑鼠動作,使用者就可以使用滑鼠與物件互動。 預設值為 true。
mouseEnabled = false 是把目前的物件取消接收滑鼠事件的能力。接著再設定mouseChildren = false把所有子系的滑鼠偵聽功能也取消,因為這個屬性只會取消所有子系的滑鼠偵聽而不會取消本身的,所以才要多設mouseEnabled這個屬性。

完成的修改本程式碼如下:
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.utils.getTimer;
import flash.ui.Mouse;
/**
MouseMoveEffect components
Author:            Tony Lu
Created date:    2010/4/15
Blog:            http://tonycube.blogspot.com/
Email:            tony.lu.915@gmail.com
*/
public class MouseMoveEffect extends Sprite
{
private var _appearTime:Number;
private var _disapperTime:Number;
private var t0:Number;

public function MouseMoveEffect()
{
_appearTime = 10;
_disapperTime = 40;
t0 = getTimer();
stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveF);
//加入這兩行
this.mouseEnabled = false;
this.mouseChildren = false;
}

[Inspectable(name = "Appear Time", type = Number, defaultValue = 10)]
public function set appearTime(t:Number):void {
if (t < 0) { t = 0; }
else if (t > 500) { t = 500; }
_appearTime = t;
}

[Inspectable(name = "Disappear Time", type = Number, defaultValue = 40)]
public function set disappearTime(t:Number):void {
if (t < 0) { t = 0; }
else if (t > 500) { t = 500; }
_disapperTime = t;
}

[Inspectable(name = "Mouse Show", type = Boolean, defaultValue = true)]
public function set showMouse(canShow:Boolean):void
{
if (canShow) {
Mouse.show();
}else {
Mouse.hide();
}
}

private function mouseMoveF(e:MouseEvent):void
{
if (isAppear()) {
var matrix:McMatrix = new McMatrix(mouseX, mouseY, 1.0, _disapperTime);
addChild(matrix);
}
}

private function isAppear():Boolean {
var t1:Number = getTimer();
if ((t1 - t0) > _appearTime) {
t0 = t1;
return true;
}
return false;
}

}

}
本文網址:http://blog.tonycube.com/2010/06/flash.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。