2011-08-24 67 views
0

我與我放大閃光燈的圖像混合。我有一切工作,只有我想要點擊X和Y的協調中心到舞臺。 (所以點擊的區域總是放大並將區域定位到舞臺中間) 圖像是一個動畫片段,它用一個補間進行放大,但我試過一切,但圖像不會居中舞臺。設置放大鼠標點擊目標到舞臺的中心

有沒有人有一個線索,我可以用來做到這一點?

我的代碼是:

const TWEEN_IN:String = "tweenIn"; 
const TWEEN_OUT:String = "tweenOut"; 
var tweenDirection:String; 

var internalPoint:Point; 
var externalPoint:Point; 
var tw:Tween; 

square.x = stage.stageWidth - square.width/2; 
square.y = stage.stageHeight - square.height/2; 

square.addEventListener(MouseEvent.CLICK, zoomIn); 

function zoomIn($e:MouseEvent):void 
{ 
    square.removeEventListener(MouseEvent.CLICK, zoomIn); 
    //internalPoint = new Point(stage.width/2, stage.height/2); 
    internalPoint = new Point(square.mouseX, square.mouseY); 
    //externalPoint = new Point(500, 350); 
    externalPoint = new Point(stage.mouseX, stage.mouseY); 
    tweenDirection = TWEEN_IN; 
    tw = new Tween(null, "", Strong.easeOut, square.scaleX, 3, 1, true); 
    tw.addEventListener(TweenEvent.MOTION_CHANGE, _syncScale); 
    tw.addEventListener(TweenEvent.MOTION_FINISH, _cleanTween); 
} 

function _syncScale($e:TweenEvent):void 
{ 
    square.scaleX = square.scaleY = tw.position; 
    var matrix:Matrix = square.transform.matrix; 
    MatrixTransformer.matchInternalPointWithExternal(matrix, internalPoint, externalPoint); 
    square.transform.matrix = matrix; 
} 

function _cleanTween($e:TweenEvent):void 
{ 
    tw.removeEventListener(TweenEvent.MOTION_CHANGE, _syncScale); 
    tw.removeEventListener(TweenEvent.MOTION_FINISH, _cleanTween); 
    tw = null; 
    if(tweenDirection == TWEEN_IN) 
    stage.addEventListener(MouseEvent.CLICK, zoomOut); 
    else if(tweenDirection == TWEEN_OUT) 
    square.addEventListener(MouseEvent.CLICK, zoomIn); 
} 

function zoomOut($e:MouseEvent):void 
{ 
    stage.removeEventListener(MouseEvent.CLICK, zoomOut); 
    //internalPoint = new Point(0, 0); 
    //externalPoint = new Point(0, 0); 
    externalPoint = square.localToGlobal(internalPoint); 
    internalPoint = square.globalToLocal(externalPoint); 
    tweenDirection = TWEEN_OUT; 
    tw = new Tween(null, "", Strong.easeOut, square.scaleX, 1, 1, true); 
    tw.addEventListener(TweenEvent.MOTION_CHANGE, _syncScale); 
    tw.addEventListener(TweenEvent.MOTION_FINISH, _cleanTween); 
} 

回答

0

只是這樣做,只要您放大:

square.x = externalPoint.x - (internalPoint.x * square.scaleX); 
square.y = externalPoint.y - (internalPoint.y * square.scaleY); 

這假定廣場上有它的左上角原點/報名點,和作品通過獲取註冊點和點擊之間的距離(internalPoint),然後確保在縮放完成後保持相同的距離,儘管縮放。

另一種解釋是,它在internalPoint(它與正方形的左上角相關)中存儲點擊的中心,並在externalPoint(這是絕對的)中存儲同一點的階段位置。這意味着,是你立即執行下列操作,那就沒有效果(縮放前):

square.x = externalPoint.x - internalPoint.x; 

但規模後,internalPoint不再給出的絕對距離的左上角之間的精確測量和鼠標點擊。相反,您需要按比例縮放廣場,因爲這是準確的,這就是爲什麼我上面的建議應該起作用。

+0

好的,我試過這個,但是當註冊點在左上方時,它啓動了舞臺中央的圖像角落的動畫,它仍然像以前一樣放大,而沒有移動它到中心。我需要以某種方式註冊點擊點並將這一點移到舞臺中心?或?:)以及你建議的代碼,是否應該放在「放大」功能中?我應該只是將其添加到原始代碼中,還是刪除其中的一部分?它不會工作:/ – Cat

+0

我的代碼行將替換_syncScale()方法中的最後三個,保留scaleX/scaleY定義,但替換其餘部分。 – richardolsson