`
sooxin
  • 浏览: 263576 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

阅读更多

作者:闪刀浪子
如需转载请注明出处www.iflashigame.com http://hi.baidu.com/mr_ziqiang

问题描述:
假设一张地图中有事先摆好的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的那个侦听器,也可以有一些办法来优化。我们可以把一张地图分成多个区域。把每个区域中存在的物体先记录下来,然后根据当前的屏幕占用了地图的哪几个区域,光遍历占用区域中的对象。

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

分享到:
评论

相关推荐

    大班美术教案:他们在做什么.docx

    教师现场示范了如何从头部开始,逐步画出人物动态的全过程,重点讲解了身体遮挡关系和绘画顺序,使孩子们能够更科学地掌握绘画技巧。 第三个阶段是幼儿实践与指导环节。在此阶段,孩子们将尝试独立完成自己的画作。...

    一年级《排队问题》[宣贯].ppt

    《排队问题》是小学一年级数学中的一个重要概念,主要涉及到数数、加减法以及逻辑推理。这个主题通过一系列实例和趣味谜语来帮助孩子们...在教学过程中,教师应鼓励孩子多画图、多思考,以提高他们的解决问题的能力。

    市委幼大班《画画》定稿(1).doc

    情境构建与角色扮演则是通过模拟故事场景,让幼儿扮演不同的角色,模仿相应的人物表情,这种身临其境的方式极大地提高了学习的趣味性和互动性。幼儿在模仿和扮演的过程中,能够更深刻地理解和体验故事中的情感和情节...

    甘肃省永靖县回民七年级语文上册 13 风雨导学案(无答案)(新版)新人教版.doc

    通过以上分析,我们可以看到,《风雨》不仅是一篇描绘自然现象的作品,更是对人与自然关系的深刻思考,以及对生活态度的寓言式表达。贾平凹的文字艺术和对细节的捕捉,使得这篇小说具有很高的文学价值。

    回家的路上作文.doc

    在车站,小明看到了一个令人动容的场景:一位母亲带着女儿在候车,她们看起来有些无助。天气突变,原本晴朗的天空转眼间变得阴云密布,乌云滚滚,紧接着是轰隆的雷声和如注的大雨。雨水无情地打在每个人的身上,仿佛...

    部编人教版五年级上册语文15小岛教学课件.pptx

    - "炊烟":做饭时产生的烟,常用来描绘乡村生活或家庭温馨的场景。 - "哼":文中提到的是多音字,可以表示轻声的叹气或唱歌等。 - "咽喉":人体部位,食物和空气的通道,比喻重要的交通或战略位置。 - "喉咙":...

Global site tag (gtag.js) - Google Analytics