闪无忧
 
首 页 业界新闻 业界杂谈 Flash教程 Flash源码 Flash图书 Flash酷站 Flex & AIR 供求信息
   本栏目通告:   有意向写收费精品教程的朋友,请联系本站合作
当前位置 :首页>flash教程>Flash应用开发>列表

游戏中关于多人物场景下遮挡关系的思考

[来源:闪刀浪子技术博客 | 作者:闪刀浪子 | 时间:2008-12-25 | 点击:  | 收藏本文  【 】]
5uflash文章摘要:问题描述: 假设一张地图中有事先摆好的30个建筑,10个npc,20个游戏玩家。我们需要让每个人物在行走的时候处理正确的遮挡关系。 前提条件: 建筑和NPC的层级在地图制作的时候是已经拍好顺序的,而且保证顺序正确。 人物类已经写好,提供了移动到某点、换装的方法 要

问题描述:
假设一张地图中有事先摆好的30个建筑,10个npc,20个游戏玩家。我们需要让每个人物在行走的时候处理正确的遮挡关系。

前提条件:
建筑和NPC的层级在地图制作的时候是已经拍好顺序的,而且保证顺序正确。
人物类已经写好,提供了移动到某点、换装的方法

要求:
给人物类的移动方法增加一个处理过程,让人物在行进中(ENTER_FRAME)随时调整自己的层级。

分析:
以上问题我们需要有几点考虑

1、人物在创建的时候是否需要让他找到自己正确的层级
2、如何知道人物行进中应该跟谁比较层级
3、比较的时候谁在上谁在下

对于第一点,我的想法是最好能够把他放到正确的层级上。至少这样做了以后对于,后面只要对发生碰撞的两个物体比较,就可以保证地图上所有参与遮挡的物体依然是个有序的。这一点我在做地图编辑器的时候已经用到了,类似于暴力排序——首先将所有的物体根据屏幕Y值粗排序,然后把所有的物体两两对比是否发生碰撞,一旦发现有碰撞并且顺序不对马上调整并且又从头开始重新两两对比,直到所有的顺序正确。

这种暴力排序的方式不可能随时随地比较,但是一旦完成就可以保证所有物体顺序正确。以后创建的对象只要和跟他发生碰撞的物体比较就行了。

对于第二点,我跟很多朋友讨论过。貌似只有遍历显示列表通过hitTest来获取到应该跟谁来比较层级。但是我们知道如果每一个人物在行进中都去遍历所有对象肯定会对效率有影响,所以我们必须来做一些优化。

如何优化?
游戏中一张地图通常都会比较大,最少也会有4个屏幕大小。我们自己的地图尺寸在8000*8000以上,差不多有100屏了。但是我们一般都会做这样的处理,把屏幕中暂时没有必要显示的建筑和NPC先移除,需要的时候我们再加载。

这样,我们只要对屏幕中可以看到建筑或者人物做遍历就行了,这实际上就是我想说得优化。

问题到这里似乎已经解决了,是的基本上已经解决了。不过需要提醒的是移除我们不能用removeChild而需要将没有必要显示的对象的visible设置为false。为什么?因为如果你removeChild再AddChild,那么你之前做好的排序就会全都乱套。

有了上面的思路我们看一下具体的做法:
1、创建一个Object对象 visibleList来记录所有visible=true对象的引用。
2、为负责随时移除和加入建筑的侦听器增加一些代码,随时更新visibleList中的数据。
3、每一个人物类都只对visibleList中存在的对象进行hitTest

对于第三点不打算再说了,天地会中曾经有专门的帖子进行过讨论。

最后的补充:
上面只是一个简单的优化。实际上对于更新visibleList的那个侦听器,也可以有一些办法来优化。我们可以把一张地图分成多个区域。把每个区域中存在的物体先记录下来,然后根据当前的屏幕占用了地图的哪几个区域,光遍历占用区域中的对象。

最新补充:
还有一种方式根据人物移动的方向预测人物的层级会向下还是向上,让人物从当前位置向上或者向下查找对象再比较层级。


文章如果有错误或者缺少文件,请发邮件提交给我们
上一篇:flash即时战略游戏开发—Rectangle对象应用实战+Array对象中被你忽略的方法
下一篇:经典flash小游戏《填色》flash cs4制作教程
>>> 最新评论:(共有 0 位网友发表了评论)      查看所有评论
  发表评论
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
·本站发布内容均为客观表达作者观点,不代表闪无忧立场,请勿攻击和漫骂
·用户发表意见仅代表其个人意见,并且承担一切因发表内容引起的纠纷和责任
·本站管理人员有权在不通知用户的情况下删除不符合规定的评论信息或留做证据
·请客观的评价您所看到的资讯,提倡就事论事,杜绝漫骂和人身攻击等不文明行为
  教程分类
  基础操作   动画特效
  应用开发   组件学习
  As程序   动画教程
  Flash cs3   AS 3.0
  FCS/FMS教程   Loading教程
  Flash与Web   Flash教程连载
  Flash 3d
  相关文章
·制作rpg风格的文本系统flash造
·使用共享对象实现静音/取消静音
·rpg风格的文本系统游戏制作
·Flash导入MP3时读取文件出现的问
·Flash游戏人工智能-峰会PPT
·Flash CS5开发AIR2与C语言通信的
·用As侦测鼠标的方位
·制作横向滑动的flash导航菜单制
·Flash游戏开发经验提纲分享
·Flash平台处理zip文件Working wi
  热门文章
·Flash进度条的制作详细讲解(组图)
·Flex 3 AdvancedDataGrid的使用(第二
·全Flash动画网站实现的基础教学
·FLASH+XML相册(附源码)
·FLV播放器汇总
·flash幻灯片网页效果
·超酷flash光晕移动效果
·Flash打造简单的飘雪动画视觉特效
·flash水影效果字
·flash春雷闪电效果
·Flash制作大雪纷飞效果动画
关于我们 - 免责声明 - 网站地图 - 商务服务 - 联系我们 - RSS地图
©CopyRight 2006-2008, 5UFlash.COM, Inc. All Rights Reserved
鲁ICP备06034971号