Flash 2D/2.5D 简单的Y轴深度排序

来源:互联网 发布:网络策划方案 编辑:程序博客网 时间:2024/06/02 06:24
http://blog.csdn.net/lin2798003/article/details/6447532

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);//更新深度信息

            }

        }

    }

}

0 0
原创粉丝点击