Flash Player 10.2 から追加された新しい機能の一つに、「ネイティブマウスカーソル」 があります。これは、ビットマップデータを OS レベルのマウスカーソルとして使うことができる機能です。
従来の Flash Player 内の表示オブジェクトを利用する方法と比べると、格段にスムースに動作し、ステージの端で隠れてしまうこともありません。ネイティブカーソルを使うと、今までよりも表現の範囲を広げられそうですね。
MouseCursorData クラスと Mouse クラス
ネイティブマウスカーソルを実現するため、Flash Player 10.2 から flash.ui パッケージに MouseCursorData クラスが追加されました。このクラスは、カーソルとして表示するオブジェクトの情報を管理します。以下の 3 つの属性を持っています。
data: Vector.<BitmapData> カーソルとして表示するビットマップデータ frameRate: Number カーソルをアニメーション表示するときのフレームレート hotSpot: Point カーソルの基準点となる座標
data 属性に指定するビットマップデータの大きさは 32 x 32 ピクセル以下になります。これは OS 側の制限です。これより大きなビットマップを指定するとエラーは発生しませんが、表示もされません。
さて、Mouse クラスにも以下の 2 つのメソッドが追加されています。どちらも static なメソッドです。
registerCursor(name:String, cursor:MouseCursorData):void ネイティブカーソルのデータを登録 unregisterCursor(name:String):void 指定されたネイティブカーソルの登録を削除
これらは、ネイティブマウスカーソルのデータ登録に関連するメソッドです。登録時には、データに固有の名前を指定します。
一旦データを登録したら、データの登録名を Mouse クラスの cursor 属性に設定します。これで、ネイティブマウスカーソルが使えるようになります。
下は、ネイティブマウスカーソルを表示するサンプルです。
// マウスカーソルに使用するデータを生成 var bitmap:Bitmap = new MyCursorData(); // ビットマップデータをベクターに設定 var cursorBitmaps:Vector.<BitmapData>; cursorBitmaps = new Vector.<BitmapData>(1, true); cursorBitmaps[0] = bitmap.bitmapData; // MouseCursorDataオブジェクトを設定 var cursorData:MouseCursorData; cursorData = new MouseCursorData(); cursorData.hotSpot = new Point(15,15); cursorData.data = cursorBitmaps; // MouseCursorDataオブジェクトの登録 Mouse.registerCursor("myCursor", cursorData); Mouse.cursor = "myCursor";
上の例では、ベクターに設定したカーソルのデータの要素は 1 つだけですが、複数の BitmapData をベクターに設定すると、パラパラアニメーションのマウスカーソルを実現できます。その際は、カーソルアニメーションのフレームレートも指定します。
下は、複数の BitmapData を指定するサンプルコードです。
// 3 フレーム分のビットマップを生成 var frame1:Bitmap = new MyFrameData1(); var frame2:Bitmap = new MyFrameData2(); var frame3:Bitmap = new MyFrameData3(); // ビットマップデータを再生順に設定 var cursorBitmaps:Vector.<BitmapData>; cursorBitmaps = new Vector.<BitmapData>(3, true); cursorBitmaps[0] = frame1.bitmapData; cursorBitmaps[1] = frame2.bitmapData; cursorBitmaps[2] = frame3.bitmapData; // MouseCursorDataオブジェクトを設定 var cursorData:MouseCursorData; cursorData = new MouseCursorData(); cursorData.hotSpot = new Point(15,15); cursorData.data = cursorBitmaps; cursorData.frameRate = 1; // フレームレートを指定 // MouseCursorDataオブジェクトの登録 Mouse.registerCursor("myAnimatedCursor", cursorData); Mouse.cursor = "myAnimatedCursor";
このように、複数のビットマップデータとフレームレートを指定するだけで自動的にアニメーションが再生されます。
ネイティブマウスカーソルか使えるかを知るために、Mouse クラスには、以下の static 属性 (読み取りのみ) も追加されました。
supportsNativeCursor:Boolean 現在の環境のネイティブマウスカーソルのサポート状況を示す
標準の OS のカーソルに戻すには、Mouse.cursor 属性に MouseCursor クラスの適当な定数を設定します。
Mouse.cursor = MouseCursor.AUTO;
詳しい説明ありがとうございます。
デスクトップアプリ開発などを視野に入れると、結構重要な機能です。
"32 x 32 ピクセル以下" というところが残念なところかもしれません。