- ActionScript - Mouse Control Logic Problem
- package
- {
- import flash.display.Sprite;
- import flash.display.Shape;
- import flash.events.MouseEvent;
- //Class
- public class RectsTest extends Sprite
- {
- //Variables
- private var redRect:Shape;
- private var blueRect:Shape;
- private var mouseDownOrigin:Number;
- private var redRectOrigin:Number;
- private var blueRectOrigin:Number;
- private var averageX:Number;
- //Constructor
- public function RectsTest()
- {
- init();
- }
- //Initialize
- private function init():void
- {
- redRect = createRect(0xFF0000, -200, 200, 100);
- redRect.x = 200;
- redRect.y = 200;
- blueRect = createRect(0x0000FF, 0, 200, 100);
- blueRect.x = stage.stageWidth - 200;
- blueRect.y = 300;
- addChild(redRect);
- addChild(blueRect);
- stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler);
- }
- //Create Rect
- private function createRect(color:Number, x:Number, width:Number, height:Number):Shape
- {
- var result:Shape = new Shape();
- result.graphics.beginFill(color);
- result.graphics.drawRect(x, 0, width, height);
- result.graphics.endFill();
- return result;
- }
- //Mouse Down Event Handler
- private function mouseDownEventHandler(evt:MouseEvent):void
- {
- mouseDownOrigin = evt.stageX;
- redRectOrigin = redRect.x;
- blueRectOrigin = blueRect.x;
- averageX = (redRect.x + blueRect.x) / 2;
- stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler);
- stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler);
- }
- //Mouse Move Event Handler
- private function mouseMoveEventHandler(evt:MouseEvent):void
- {
- if (evt.stageX < averageX)
- redRect.x = redRectOrigin + evt.stageX - mouseDownOrigin;
- if (evt.stageX > averageX)
- blueRect.x = blueRectOrigin + evt.stageX - mouseDownOrigin;
- averageX = (redRect.x + blueRect.x) / 2;
- }
- //Mouse Up Event Handler
- private function mouseUpEventHandler(evt:MouseEvent):void
- {
- stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler);
- stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler);
- }
- }
- }
- package
- {
- import flash.display.Sprite;
- import flash.display.Shape;
- import flash.events.MouseEvent;
- //Class
- public class RectsTest extends Sprite
- {
- //Variables
- private var redRect:Shape;
- private var blueRect:Shape;
- private var mouseDownOrigin:Number;
- private var redRectOrigin:Number;
- private var blueRectOrigin:Number;
- private var averageX:Number;
- //Constructor
- public function RectsTest()
- {
- init();
- }
- //Initialize
- private function init():void
- {
- redRect = createRect(0xFF0000, -200, 200, 100);
- redRect.x = 200;
- redRect.y = 200;
- blueRect = createRect(0x0000FF, 0, 200, 100);
- blueRect.x = stage.stageWidth - 200;
- blueRect.y = 300;
- addChild(redRect);
- addChild(blueRect);
- stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler);
- }
- //Create Rect
- private function createRect(color:Number, x:Number, width:Number, height:Number):Shape
- {
- var result:Shape = new Shape();
- result.graphics.beginFill(color);
- result.graphics.drawRect(x, 0, width, height);
- result.graphics.endFill();
- return result;
- }
- //Mouse Down Event Handler
- private function mouseDownEventHandler(evt:MouseEvent):void
- {
- mouseDownOrigin = evt.stageX;
- redRectOrigin = redRect.x;
- blueRectOrigin = blueRect.x;
- averageX = (redRect.x + blueRect.x) / 2;
- stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler);
- stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler);
- }
- //Mouse Move Event Handler
- private function mouseMoveEventHandler(evt:MouseEvent):void
- {
- if (evt.stageX < averageX) {
- redRect.x = redRectOrigin + evt.stageX - mouseDownOrigin;
- redRectOrigin = redRect.x;
- }
- if (evt.stageX > averageX) {
- blueRect.x = blueRectOrigin + evt.stageX - mouseDownOrigin;
- blueRectOrigin = blueRect.x;
- }
- mouseDownOrigin = evt.stageX;
- averageX = (redRect.x + blueRect.x) / 2;
- }
- //Mouse Up Event Handler
- private function mouseUpEventHandler(evt:MouseEvent):void
- {
- stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler);
- stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventHandler);
- }
- }
- }