1. 程式人生 > >令物體沿著指定路徑運動[as3版]

令物體沿著指定路徑運動[as3版]

*在舞臺中有一個名為fk的movieclip和一個名為line的movieclip。


這是執行之後的效果。

以上程式按著原閃吧文章的思路用as3實現了一遍。

import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.geom.Matrix;
import crawlingtosea.methods.Tick;
import crawlingtosea.events.TickEvent;

var rect:Rectangle=line.getBounds(this);

var bitmapdata:BitmapData=new BitmapData(rect.width,rect.height,false,0);
bitmapdata.draw(line);

var pa:Array=pa?pa:[];

var w:uint=rect.width;
var h:uint=rect.height;

trace(rect);
for(var i:int=0;i<w;i++){
	for(var j:int=0;j<h;j++){
		if(bitmapdata.getPixel(i,j)==Number(0x660000))
		{
			pa.push(new Point(i+rect.x,j+rect.y));
		}
	}
}
trace(pa[0]);
fk.x=pa[0].x;
fk.y=pa[0].y;
//trace(bitmapdata.getPixel(0,50));
//trace(pa)
var tick:Tick=new Tick(1,10);
stage.addEventListener(MouseEvent.CLICK,onClick);
function onClick(e:MouseEvent):void{
	stage.removeEventListener(MouseEvent.CLICK,onClick);
	trace("onClick");
	tick.addEventListener(TickEvent.TICK,onTick);
}

function onTick(e:Event):void{
	fk.x=pa[0].x;
	fk.y=pa[0].y;
	pa.shift();
		  
	if(pa.length==0)
	{
		tick.stop();
		trace("over");
	}
}



其原理是利用bitmapdata的getpixel得到路徑所有的座標值。