我刷新了我的AS3基礎知識。現在我正在創建尺寸由鼠標距離指定的影片剪輯。Actionscript 3在鼠標移動性能上的重繪線
這是我的全碼:
package {
import flash.display.MovieClip;
import flash.display.Shape;
import flash.display.Graphics;
import flash.events.MouseEvent;
import wck.World;
public class Game extends World {
private var isDragging:Boolean = false;
private var line:Shape = new Shape();
private var lineInfo:Array = [];
public function Game() {
addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
addEventListener(MouseEvent.MOUSE_MOVE, recalcDrag);
addEventListener(MouseEvent.MOUSE_UP, stopDragging);
}
private function addIt(dist:Number):void {
var i:Rect = new Rect();
i.x = mouseX;
i.y = mouseY;
i.width = dist;
i.height = dist;
addChild(i);
}
private function startDragging(e:MouseEvent):void {
if(!(e.target is Rect)) {
isDragging = true;
lineInfo['bX'] = mouseX;
lineInfo['bY'] = mouseY;
line.graphics.moveTo(mouseX, mouseY);
addChild(line);
}
}
private function recalcDrag(e:MouseEvent):void {
if(isDragging) {
line.graphics.clear();
line.graphics.lineStyle(10, 0x000, .65);
line.graphics.moveTo(lineInfo['bX'], lineInfo['bY']);
line.graphics.lineTo(mouseX, mouseY);
}
}
private function stopDragging(e:MouseEvent):void {
if(isDragging) {
var distance = DistanceTwoPoints(mouseX, lineInfo['bX'], mouseY, lineInfo['bY']);
line.graphics.clear();
isDragging = false;
if(!(e.target is Rect) && distance != 0) addIt(distance);
}
}
public function DistanceTwoPoints(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);
}
}
}
不過,我已經感覺這個鼠標移動重繪整條生產線可能是資源昂貴。我怎樣才能讓它輕鬆一點?
有因爲設置之前,檢查距離值只有一個錯誤,並且我也得到了有利於輸入框擺脫鼠標移動監聽器都沒有。感謝您的解釋 – Misiur 2012-02-19 17:23:16
您應該使用'MOUSE_MOVE'事件偵聽器作爲啓動「ENTER_FRAME」事件的工具,否則無論是否需要,「ENTER_FRAME」事件都將始終運行,這比僅使用資源只有一個MOUSE_MOVE事件。 – TheDarkIn1978 2012-02-19 17:43:53
也,我解決了我的例子中的錯誤。哎呀! :) – TheDarkIn1978 2012-02-19 17:46:23