Flash本身實際上只有提供隱藏(顯示)預設游標的功能:Mouse.hide()/Mouse.show(),沒有提供游標變更的Function。所以我們在製造自訂游標的方式,實際上是將原本的游標隱藏之後,透過onMouseMove的事件,持續讓MovieClip定位在滑鼠當時位置來形成新的游標圖是。由於我們跟隨的元件可以完全客製化,因此MovieClip如果直接內含Button元件在內,則使用者觸發onMouseDown事件時,就可以將對應的動畫訊息設計在Button元件的MouseDown frame上。
簡單範例首先準備好要當游標的圖片,如下圖中,我們設計一個名為Pen的MovieClip,記得指標拿來點擊的位置對準該MovieClip座標(0,0)的位置,以方便ActionScript控制。

先用偷懶的方式來實作,新增一個最上層的Layer,我把它取名為Curor,直接將Pen的圖片拉近該Layers中,並且將Pen圖片的Instance Name取名為:MyCursor。

再來就是實際的控制了,我們在Curor Layer的第1個Keyframe填上下列的ActionScript,在基本使用上,就如果游標是該隻筆一樣了。

先用偷懶的方式來實作,新增一個最上層的Layer,我把它取名為Curor,直接將Pen的圖片拉近該Layers中,並且將Pen圖片的Instance Name取名為:MyCursor。

再來就是實際的控制了,我們在Curor Layer的第1個Keyframe填上下列的ActionScript,在基本使用上,就如果游標是該隻筆一樣了。
Mouse.hide();
this.onMouseMove=function(){
this.MyCursor._x=this._xmouse;
this.MyCursor._y=this._ymouse;
}
隨時切換自訂村夹
不過如果就只有這樣子,對於基本的應用還OK,但是對於需要頻繁變更遊標圖示的時候,就變成需要有系統的去管理它反而比較方便,在此我是設計一個CursorFactory來管理整個游標圖式。程式的原因很簡單,我在Make Method中,將會用到的Cursor圖示載入並且預設隱藏,但是在滑鼠移動時都還是會跟隨滑鼠的移動而修正作標,可以利用Change Method希望目前顯示特定的圖示,或用HideAll將游標回歸預設的箭頭。程式碼如下:
不過如果就只有這樣子,對於基本的應用還OK,但是對於需要頻繁變更遊標圖示的時候,就變成需要有系統的去管理它反而比較方便,在此我是設計一個CursorFactory來管理整個游標圖式。程式的原因很簡單,我在Make Method中,將會用到的Cursor圖示載入並且預設隱藏,但是在滑鼠移動時都還是會跟隨滑鼠的移動而修正作標,可以利用Change Method希望目前顯示特定的圖示,或用HideAll將游標回歸預設的箭頭。程式碼如下:
class UI.Control.CursorFactory
{
static var cursors : Array;
private function CursorFactory (){}
static function Make(){
cursors=new Array();
cursors ["drawLine"] =
_root.attachMovie ("drawLine", "drawLine", _root.getNextHighestDepth ());
cursors ["drawLine"]._visible = false;
cursors ["rubber"] =
_root.attachMovie ("rubber", "rubber", _root.getNextHighestDepth ());
cursors ["rubber"]._visible = false;
cursors ["signature"] =
_root.attachMovie ("signature", "signature", _root.getNextHighestDepth ());
cursors ["signature"]._visible = false;
var thisCursors = cursors;
_root.onMouseMove=function (){
for (var i in thisCursors){
thisCursors [i]._x = _root._xmouse;
thisCursors [i]._y = _root._ymouse;
}
};
}
static function AddCursor (id : String, instance : String){
cursors [id] = _root.attachMovie (instance, id, _root.getNextHighestDepth ());
cursors [id]._visible = false;
}
static function Change (id : String){
//trace("Change:"+id+"/"+cursors [id]);
if (cursors [id] != undefined){
//trace("Change:"+cursors[id]);
cursors [id]._visible = true;
Mouse.hide ();
}
}
static function HideAll (){
for (var i in cursors){
cursors [i]._visible = false;
}
Mouse.show ();
}
}
沒有留言:
張貼留言