2006年8月7日 星期一

Flash Tips 02:給定A,B兩座標點,讓人物自動位移



在flash內任意點按滑鼠,物件將自動跑到該點
在flash遊戲製作上,經常需要用到物體自動移動,
利用國中所學的數學三角函式,利用flash Math所提供的function
即可很簡單的做到遊戲需求
一.應用情境

  1. 畫面上有一人物,使用者用滑鼠在畫面上任意一點,人物即自動走到該位置


二.運算重點

  1. 以兩點計算出兩點的角度(sida)

  2. 以角度算出在單位時間內分別在x方向(dx)與y方向(dy)位移量

  3. 讓物件以計算出之位移量等速移動,直到到達目標點(x2,y2)為止


三.函式說明

  1. init():初始化整個程式變數,並加入滑鼠監聽,以取得滑鼠點選處座標當作
    物件位移之目標座標

  2. run():計算兩點角度,計算x,y位移量,並啟動執行物件移動

  3. sub_run():執行物件移動


四.程式碼

function run(x1,y1,x2,y2){//x1,y1起點,x2,y2終點
sida=Math.atan2(y2-y1,x2-x1);
dx=speed*Math.cos(sida);
dy=speed*Math.sin(sida);
run_id=setInterval(sub_run,50,x2,y2,dx,dy);
}
function sub_run(x2,y2,dx,dy){
if(Math.abs(gameRoot.man_mc._x-x2)>Math.abs(dx)){
gameRoot.man_mc._x+=dx;
xok=0;
}else{
gameRoot.man_mc._x=x2;
xok=1;
};
if(Math.abs(gameRoot.man_mc._y-y2)>Math.abs(dy)){
gameRoot.man_mc._y+=dy;
yok=0;
}else{
gameRoot.man_mc._y=y2;
yok=1;
};
if(xok==1&&yok==1){
clearInterval(run_id);
}
}
function init(){
speed=10;
_global.gameRoot=this;
mListener = new Object();
mListener.onMouseUp = function (){
clearInterval(run_id);
run(gameRoot.man_mc._x,gameRoot.man_mc._y,gameRoot._xmouse,gameRoot._ymouse);
};
Mouse.addListener(mListener);
}
init();

沒有留言: