2006年8月9日 星期三

Flash Tips 03:物件依序位移


在畫面上任意點按滑鼠,按按鈕,物件即按軌跡運動
延續上一個tip,兩定點運動,我們現在讓人物
依照設定軌跡運動

一.應用情境

  • 在畫面上任點滑鼠,讓人物依照所設定軌跡運動


二.說明

  • 在畫面上點按滑鼠,即將座標存到陣列內,並在畫面上產生參考點,
    當按按鈕後,即依序取出陣列內座標,讓人物運動,
    當到達目標點,再檢查陣列是否有下一個目標點
    若有,即取出座標,開始讓人物運動
    反覆,至讀完陣列內容停止


三.函式說明

  1. init():初始化變數,並加入滑鼠監聽

  2. pushArray(x,y):處理將滑鼠座標加入陣列儲存用函式

  3. checkNext():用來判斷是否還有下一個目標點


四.程式碼
function run(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);
checkNext();
}
}

function pushArray(x,y){
gameRoot.sample_mc.duplicateMovieClip("sample"+(loc.length+10),(loc.length+10));
gameRoot["sample"+(loc.length+10)]._x=x;
gameRoot["sample"+(loc.length+10)]._y=y;

var tmpObj=new Object();
tmpObj.x=x;
tmpObj.y=y;
loc.push(tmpObj);
}

but_mc.onRelease=function(){
clearInterval(run_id);
run(gameRoot.man_mc._x,gameRoot.man_mc._y,loc[0].x,loc[0].y);
}

function checkNext(){
if(loc[nowloc+1]){
nowloc++;
clearInterval(run_id);
run(gameRoot.man_mc._x,gameRoot.man_mc._y,loc[nowloc].x,loc[nowloc].y);
}else{
for(i=0;i<loc.length;i++){
gameRoot["sample"+(i+10)].removeMovieClip();
}
loc=new Array();
nowloc=0;
}
}

function init(){
speed=8;
_global.gameRoot=this;
nowloc=0;
loc=new Array();
man_mc.swapDepths(500);
mListener = new Object();
mListener.onMouseUp = function (){
if(!gameRoot.but_mc.hitTest(_xmouse,_ymouse,false)){
pushArray(gameRoot._xmouse,gameRoot._ymouse);
}
};
Mouse.addListener(mListener);
}
init();
</pre>

沒有留言: