from happy milk:
用三个类来说明。
人物类
public class Avatar extends Sprite{
public var depth:int; //主人公在map地图中的深度
public function Avatar():void{
//人物样式不管
}
}
更新障碍物和人物在map地图中的深度类
public class Solve
{
//初始化map中的所有子级实例
public static function initIndex (map:DisplayObjectContainer , avatar:Avatar):Array
{
var arr:Array = [ ];
for(var i:int;i < map.numChildren;i++){
var dis:DisplayObject = map.getChildAt(i);
if(dis is Avatar){
avatar.depth = i;
}else{
if(dis is Sprite && dis.name != "back") {//分析为障碍物 而且不是 back 背景
arr[i] = [dis , i];
}
}
return arr;
}
}
}
寻路走路类
public class Road
{
private var map:MovieClip; //地图
private var block:Array = [ ]; //障碍物
private var avatar:Avatar; //人物
//内有函数update -- 人物行走过程中 以帧频去循环或者setInterval或者Timer都可以
//其中省去了一些具体操作函数
private function init():void
{
block = Solve.initIndex(map,avatar);//更新深度信息
}
private function update():void
{
var len:int = block.length;
for(var i:int;i < len;i++)
{
var dis:DisplayObject = block[i][0];//障碍物
var depth:int = block[i][1]; //障碍物深度
if((avatar.y >= dis.y && avatar.depth < depth) || (avatar.y <= dis.y && avatar.depth >depth))
{
map.setChildIndex(avatar,depth);
Solve.initIndex(map,avatar);//更新深度信息
}
}
}
}