Thursday, March 11, 2010

ActionScript3: Changing mouse pointer

Simple example shows how to change Mouse-Pointer in Action-Script3

package



{


import flash.display.Sprite;


import flash.events.MouseEvent;


import flash.ui.Mouse;


public class SwitchOutPointer extends Sprite


{


private var circleMouse:Sprite;


private var squareMouse:Sprite;


private var currentMouse:Sprite;


private var useSquareField:Sprite;


private var useCircleField:Sprite;






public function SwitchOutPointer()


{


super();


useSquareField = new Sprite();


useSquareField.graphics.beginFill(0xFAAAAF, 1);


useSquareField.graphics.drawRect(0, 0, 100, 100);


useSquareField.graphics.endFill();


useSquareField.name = "square";


useSquareField.x = 200;


useCircleField = new Sprite();


useCircleField.graphics.beginFill(0x543454, 1);


useCircleField.graphics.drawRect(0, 0, 100, 100);


useCircleField.name = "circle";


useCircleField.graphics.endFill();


addChild(useCircleField);


addChild(useSquareField);


//here I add my event listeners to the respective sprites


useCircleField.addEventListener(MouseEvent.ROLL_OVER, useCircle);


useSquareField.addEventListener(MouseEvent.ROLL_OVER, useSquare);


useCircleField.addEventListener(MouseEvent.ROLL_OUT, showMouse);


useSquareField.addEventListener(MouseEvent.ROLL_OUT, showMouse);


//now I'm creating the object thats going to replace


//my mouse when we're over certain sprites


circleMouse = new Sprite();


circleMouse.graphics.beginFill(0x00ff00, 1);


circleMouse.graphics.drawCircle(0, 0, 5);


circleMouse.graphics.endFill();


currentMouse = new Sprite();






squareMouse = new Sprite();


squareMouse.graphics.beginFill(0xff0000, 1);


squareMouse.graphics.drawRect(0, 0, 10, 10);


squareMouse.graphics.endFill();


//now I want to listen to ALL mouse movement events


//so that I can reposition the mouse


this.stage.addEventListener(MouseEvent.MOUSE_MOVE, moveNewMouse);


}






/* move whatever mouse is the current mouse to the mouse's stage


* position. note how I offset the position slightly this is because


* the rollOff event of the useSquareField and useCircleField will be


* fired if the circleMouse or squareMouse object is in between the


* mouse and the useSquareField or useCircleField object. */


private function moveNewMouse(mouseEvent:MouseEvent):void


{


currentMouse.x = mouseEvent.stageX + 5;


currentMouse.y = mouseEvent.stageY + 5;


mouseEvent.updateAfterEvent();


}






private function useSquare(mouseEvent:MouseEvent):void


{


Mouse.hide();


addChild(squareMouse);


currentMouse = squareMouse;


}






private function useCircle(mouseEvent:MouseEvent):void


{


Mouse.hide();


addChild(circleMouse);


currentMouse = circleMouse;


}






/* if we roll off, then go ahead and remove respective icon


* for the mouse using the target property to figure out which


* one it was and show the normal mouse icon. */


private function showMouse(mouseEvent:MouseEvent):void


{


if((mouseEvent.target as Sprite) == useSquareField)


{


removeChild(squareMouse);


}


else {


removeChild(circleMouse);


}


currentMouse = new Sprite();


Mouse.show();


}


}
}

No comments: