Вы можете использовать событие ENTER_FRAME
вместо события MOUSE_MOVE
. MOUSE_MOVE
- довольно дорогой звонок, особенно на мобильных устройствах, и он не имеет реальных преимуществ перед ENTER_FRAME
, если вы правильно его настроите.
также, если вы не используете временную шкалу в Flash Professional , вам следует использовать Sprite
объекты вместо MovieClip
объектов.
примечание: следующий код не проверен:
package
{
//Imports
import flash.display.Sprite;
import flash.display.Shape;
import flash.display.Graphics;
import flash.events.MouseEvent;
import flash.events.Event;
import wck.World;
//Class
public class Game extends World
{
//Properties
private var line:Shape;
private var lineInfo:Array;
//Constructor
public function Game()
{
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventListener);
}
//Mouse Down Event Listener
private function mouseDownEventListener(e:MouseEvent):void
{
if (!(e.target is Rect))
{
removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventListener);
addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventListener);
lineInfo = new Array();
lineInfo['bX'] = mouseX;
lineInfo['bY'] = mouseY;
line = new Shape();
line.graphics.moveTo(mouseX, mouseY);
addChild(line);
}
}
//Mouse Move Event Listener
private function mouseMoveEventListener(e:MouseEvent):void
{
removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveEventListener);
addEventListener(Event.ENTER_FRAME, enterFrameEventListener);
addEventListener(MouseEvent.MOUSE_UP, mouseUpEventListener);
}
//Enter Frame Event Listener
private function enterFrameEventListener(e:Event):void
{
line.graphics.clear();
line.graphics.lineStyle(10, 0x000, .65);
line.graphics.moveTo(lineInfo['bX'], lineInfo['bY']);
line.graphics.lineTo(mouseX, mouseY);
}
//Mouse Up Event Listener
private function mouseUpEventListener(e:MouseEvent):void
{
removeEventListener(Event.ENTER_FRAME, enterFrameEventListener);
removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventListener);
addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventListener);
line.graphics.clear();
var distance:Number = distanceBetweenTwoPoints(mouseX, lineInfo['bX'], mouseY, lineInfo['bY']);
if (!(e.target is Rect) && distance != 0)
{
addRectangle(distance);
}
}
//Distance Between Two Points
public function distanceBetweenTwoPoints(x1:Number, x2:Number, y1:Number, y2:Number):Number
{
var dx:Number = x1 - x2;
var dy:Number = y1 - y2;
return Math.sqrt(dx * dx + dy * dy);
}
//Add Rectangle
private function addRectangle(distance:Number):void
{
var rect:Rect = new Rect();
rect.x = mouseX;
rect.y = mouseY;
rect.width = distance;
rect.height = distance;
addChild(rect);
}
}
}