※ 引述《shayato (in dreams)》之銘言:
: 我想做一個東西是
: 當滑鼠點下後,指定的物件會開始朝向滑鼠點下的方向前進
: 可以請高手指教一下嗎...?
: 謝謝
以下是我寫的程式碼, 寫在 Timeline 第一格
在 MX 2004 下測試正常, 不過好像有點長了, 不知道有沒有更好的方法
PS: 其中 mc 為該物件的名稱
var nV:Number = 100; // 移動速率 (pixel/sec)
var nUpdateRate:Number = 30; // 每多少毫秒更新一次 (愈小愈平順)
var nMinRange:Number = 2; // 與目的地的距離小於此值時, 就直接黏在上面 (pixel)
var nInterval:Number;
var oListener:Object = new Object();
oListener.onMouseDown = function() { // 按下滑鼠時的動作
clearInterval(nInterval);
var nX:Number = Math.floor(_root._xmouse);
var nY:Number = Math.floor(_root._ymouse);
nInterval = setInterval(moveAnimate, nUpdateRate, nX, nY);
};
Mouse.addListener(oListener);
function moveAnimate(nX:Number, nY:Number):Void {
var nDistance:Number =
Math.sqrt(Math.pow(nX-mc._x, 2) + Math.pow(nY-mc._y, 2));
var nXPart:Number = (nX - mc._x) / nDistance; // X 分量
var nYPart:Number = (nY - mc._y) / nDistance; // Y 分量
mc._x += nV * nXPart * nUpdateRate / 1000;
mc._y += nV * nYPart * nUpdateRate / 1000;
if (isOut(nX)) { // 判斷是否夠接近於目的地
clearInterval(nInterval);
}
updateAfterEvent();
}
function isOut(nTargetX:Number):Boolean {
if (Math.abs(nTargetX - mc._x) <= nMinRange)
return true;
return false;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.58.168.200
※ 編輯: eliang 來自: 210.58.168.200 (08/10 13:37)