当前位置:主页>FLASH AS 编程>AS基础篇>AS 3.0>文章内容
  • 45度深度排序(as3.0)
  • 来源:37Studio 作者:37Studio 2008-01-30 【
FlashAs作品发表>>我要投稿 | FlashAs讨论区>>AS论坛
Flash Media Server学习站>>www.FMScn.com


        搞了一段时间的深度排序,几经波折,看了网上相关的资源但是并没有一个完整的介绍,于是自己写了一个,不是很完善,分享出来,希望大家多扔砖块,多给建议,下面是我的思路:
       1. 将物体的显示区域多边形、占用区域多边形[即物体在游戏坐标中的投影]勾出来.
       2. 每一个物体中占用区域多边形中点集屏幕坐标y值最小的点为物体的zMin点,y值最大的点为物体的zMax点.
       3. 先根据物体的zMin由小到大排序生成列表temp,并将temp复制一份列表为zIndex;
       4. 从temp中取一个物体P出来,跟余下的物体Q比较:
          a. P与Q发生碰撞;
          b. (1)如果P的index小于Q的index,那么检测P所占用的多边形的游戏坐标是否在Q近视点的一侧;(2)或如果P的index大小Q的index,那么检测P所占用的多边形的游戏坐标是否在Q远视点的一侧;
       5. 如果以上条件都满足,即要对P和Q的深度进行调整. 调整方法如下:
        将标记flag设置为false, 在有序列表zIndex中,P和Q必有先后关系,遍历zIndex, 如果是因为4.b(1)条件的话,则在zIndex中找到P,并将标记flag设置为true, ,凡是遇到flag为true的物体其index都加1,由num记录有多少个物体加了1,直到遇到Q,遇到Q后将Q的index-num并退出遍历; 如果是因为4.b(2)的条件的话,刚好相板,在列表zIndex中,Q必在P之前,按上述操作,先找到Q,将标记flag设置为true,......
       6. 调整完后,将列表zIndex按index重新排序.
       7. 执行4直到temp中没有任何物体.
       DEMO:

      

        点击其中一个物体拖动即可.





上一篇:位图梯形化(as3.0)   下一篇:As3 模拟As2.0 LoadVars传参
  • 用户名:新注册) 密码: 匿名评论
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)

Copyright © 2006-2008 flashas.net All Rights Reserved.
网站内容咨询: admin#flashas.net (#为@) 联系QQ:40777822 浙ICP备06033001号
(本网站最佳浏览解析度为1024*768, 建议使用IE 6.0或以上版本浏览器。)