1.FlashPlayer10.2以后自带的定义方式:
转自:http://www.freeliver.net/?p=167
一、关于MouseCursor
这个以前的做法貌似都是直接做的鼠标跟随,因为原来的flash.ui.Mouse这个类就只有两个方法:hide();show();你要注册本地的cursor是不可能的,不过flexsdk中有很简单的api来注册本地的cursor,也没有看源码,可能也是鼠标跟随吧。
现在来看这个10.2里面的新api接口,这里涉及的类有:
flash.ui.Mouse,flash.ui.MouseCursorData,flash.ui.MouseCurosr
以前觉得flash.ui是名不副实的,都没有真正能够操作ui的接口嘛,现在10.2有了改观。
可以通过Mouse.cursor= “cursor style name” 来指定一个cursor,在10.0.0到10.2应该都是支持的,可以定义基本的一些,这些cursor在MouseCursor常量中有定义:
public static const ARROW:String = "arrow"
public static const AUTO:String = “auto”
public static const BUTTON:String = “button”
public static const HAND:String = “hand”
public static const IBEAM:String = “ibeam”
然后你如果要定义本地支持的cursor,应该是:
1. 使用Mouse.supportsNativeCursor判断是否支持此api,这样就有比较好的兼容性了。
2.实例化一个MouseCursorData对象,此对象是cursor的源
此对象有两个属性:
MouseCursorData.data = Vector.<BitmapData>
Vector.<BitmapData>貌似也是10以后的新语法了,其实就是像java里面的集合,定义的集合只能接受BitmapData元素,所以还必须实例化或者得到一个BitmapData对象(无论是自己使用绘图api画一个,还是来自外部图片文件),其像素最大不能超过32x32pixels ,超过了就无效并且报出运行时错误,所以编译的时候根本没错。
3. 使用Mouse.registerCursor(‘cursor name’,MouseCursorData); 注册一个本地的cursor。
4. Mouse.cursor = “刚才指定的cursor name”
5. 切换的话,可以先注销刚才的cursor:Mouse.unregisterCursor(name:String);
到此自定义鼠标手势就ok了:
官方有一个例子是自己画的鼠标手势,
附一个来自外部图片的:
package{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import flash.ui.*;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Shape;
public class Main extends Sprite{
[Embed(source="./assets/2.jpg")]
private var iconClass:Class;
private var iconImg:Bitmap;
public function Main():void{
this.iconImg = new iconClass() as Bitmap;
if(stage){
this.init();
}else{
this.addEventListener(Event.ADDED_TO_STAGE,init);
}
}
protected function init(e:Event = null):void{
var textfield:TextField = new TextField();
textfield.text = “”;
textfield.x = this.stage.stageWidth/2;
textfield.y = this.stage.stageHeight/2;
this.addChild(textfield);
if(Mouse.supportsNativeCursor){
var mouseImage:Vector.<BitmapData> = new Vector.<BitmapData>();
mouseImage.push(this.iconImg.bitmapData);
var bitmapData:BitmapData = new BitmapData(32,32,true,0);
var shape:Shape = new Shape();
shape.graphics.beginFill(0xFF0000,.85);
shape.graphics.drawRect(0,0,32,32);
shape.graphics.endFill();
bitmapData.draw(shape);
//mouseImage.push(bitmapData);
var mouseCursorData:MouseCursorData = new MouseCursorData();
mouseCursorData.frameRate = 1;
mouseCursorData.data = mouseImage;
Mouse.registerCursor(‘testCursor’,mouseCursorData);
Mouse.cursor = ‘testCursor’;
textfield.text = ‘支持本地话的鼠标!’;
}else{
textfield.text = ‘不支持本地化的鼠标!’;
}
}
}
}
2.通过跟随鼠标动画的方式来定义
转自:http://bbs.9ria.com/thread-69184-1-1.html