Bisher wurden eigene Mauscursor in Flash und AIR so realisiert, dass der eigentliche Mauscursor ausgeblendet und stattdessen ein Displayobject anhand der Mausposition animiert wurde.

Mit AIR 2.6 erhält eine Neuheit Einzug in die Flash Plattform: die nativen Mauscursor. Sie werden von den Runtimes direkt mithilfe des Betriebssystems umgesetzt, was einen Performanceverbesserung mit sich bringt.

Ob native Mauscursor möglich sind, kann man mit der Eigenschaft Mouse.supportsNativeCursor überprüfen. Die maximale Größe eines Cursors darf 32x32 Pixel betragen. Laut Doku sind Transparenzen auf dem meistens Betriebssystemen möglich.

Auch animierte Mauscursor können leicht erstellt werden. Dazu fügt man einfach die verschiedene Animationsphasen des Cursors als Bitmapdaten hinzu und stellt eine Framerate ein (MouseCursorData.frameRate).

Außerdem lässt sich definieren, auf welchem Punkt der Grafik/Animation die Mausspitze sitzen soll (MouseCursorData.hotSpot). Der Defaultwert ist die linkere obere Ecke (0/0).

Beispiel

Quellcode

Actionscript:
  1. package
  2. {
  3.     import flash.display.*;
  4.     import flash.geom.Point;
  5.     import flash.geom.Rectangle;
  6.     import flash.ui.Mouse;
  7.     import flash.ui.MouseCursorData;
  8.     import flash.events.MouseEvent;
  9.     import flash.text.TextField;
  10.  
  11.     [SWF(backgroundColor="0xEEEEEE")]
  12.     public class NativeCursorExample extends Sprite
  13.     {
  14.         [Embed(source="custom.png")] private var CustomCursorClass:Class;
  15.  
  16.         private static const CURSOR_WIDTH:uint  = 32;
  17.         private static const CURSOR_HEIGHT:uint = 32;
  18.  
  19.         private var CUSTOM_CURSOR_NAME:String = "sandclock";
  20.         private var mcd:MouseCursorData;
  21.  
  22.         public function NativeCursorExample()
  23.         {
  24.             checkSupportForNativeCursors();
  25.            
  26.             stage.addEventListener(MouseEvent.CLICK, onClick);
  27.            
  28.             addCursor();
  29.  
  30.         }
  31.  
  32.         private function addCursor():void {
  33.             // neues Vectorobjekt für Bitmaps anlegen
  34.             var bitmaps:Vector. = new Vector.;
  35.  
  36.             // Bitmapdaten-Object aus dem PNG erstellen
  37.             var customCursor:Bitmap = new CustomCursorClass();
  38.  
  39.             // neues Rechteck in Cursorgröße erstellen
  40.             var rect:Rectangle = new Rectangle(0 , 0, CURSOR_WIDTH, CURSOR_HEIGHT);
  41.            
  42.             // Dem Bitmap-Vektor hinzufügen
  43.             bitmaps.push(customCursor.bitmapData);
  44.            
  45.             // neues MausCursorData-Objekt
  46.             mcd = new MouseCursorData();
  47.             mcd.data = bitmaps;
  48.  
  49.             // Hot Spot der Maus ändern, da standardmäßig auf 0/0
  50.             mcd.hotSpot = new Point(16, 16);
  51.  
  52.             // Framerate auf 0, da keine Animation
  53.             mcd.frameRate = 0;
  54.  
  55.             // Cursor registrieren
  56.             Mouse.registerCursor(CUSTOM_CURSOR_NAME, mcd);     
  57.         }
  58.  
  59.  
  60.         private function onClick(evt:MouseEvent):void {
  61.            
  62.             if (Mouse.cursor == CUSTOM_CURSOR_NAME) {
  63.                
  64.                 // standard cursor
  65.                 Mouse.cursor = flash.ui.MouseCursor.AUTO;
  66.                
  67.             } else {
  68.                
  69.                 // custom cursor
  70.                 Mouse.cursor = CUSTOM_CURSOR_NAME;     
  71.             }
  72.         }
  73.        
  74.         private function checkSupportForNativeCursors():void {
  75.            
  76.             // neues Textfeld
  77.             var txt:TextField = new TextField();
  78.             txt.width = 300;
  79.             txt.x = txt.y = 10;
  80.                
  81.             // Fehlermeldung oder Hinweis
  82.             Mouse.supportsNativeCursor ? txt.text = "Please click stage to change the cursor." : txt.text = "Native mouse cursors are not supported";         
  83.            
  84.             //Textfeld auf die Bühne
  85.             addChild(txt);
  86.         }
  87.  
  88.  
  89.     }
  90. }

Link: Native Cursors in AIR 2.6
Link: MouseCursorData-Klasse (ActionScript-Referenz)