`
sooxin
  • 浏览: 257736 次
  • 性别: 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的那个侦听器,也可以有一些办法来优化。我们可以把一张地图分成多个区域。把每个区域中存在的物体先记录下来,然后根据当前的屏幕占用了地图的哪几个区域,光遍历占用区域中的对象。

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

分享到:
评论

相关推荐

    flash实现遮挡关系

    在Flash平台上,实现遮挡关系对于创建具有深度感和交互性的2D场景至关重要。本教程将深入探讨如何使用Flash技术来实现多层遮挡效果,并附带源码供学习参考。 首先,我们要理解遮挡关系的基本概念。遮挡是指在二维...

    delphi游戏中的遮挡关系处理示范

    在开发游戏过程中,遮挡关系处理是一个至关重要的环节,它涉及到场景中物体的前后顺序以及它们如何相互覆盖。"delphi游戏中的遮挡关系处理示范"这个项目专注于演示如何在Delphi环境中解决这个问题,利用DirectX图形...

    【Godot4自学手册】第九节人物碰撞、遮挡关系背景搭建源代码

    《Godot4自学手册》第九节主要探讨了在游戏开发中如何实现人物碰撞检测、遮挡关系处理以及背景搭建,这些是2D游戏设计中至关重要的环节。Godot4作为一个强大的开源游戏引擎,提供了丰富的功能来支持这些操作。以下是...

    局部遮挡下的目标识别算法

    提出了一种新的基于选择互相关系数的目标识别算法用于搜索有局部遮挡的目标区域。算法分两步进行:用增量互相关算 法计算出模板图和场景图的增量图像,比较二者增量图像的一致性,计算出选择互相关系数矩阵;结合...

    基于深度学习抗遮挡的多目标跟踪研究.pdf

    多目标跟踪是计算机视觉研究中的一个难点,尤其是在物体之间存在相互遮挡的情况下,多目标跟踪会引发跟踪漂移,导致无法顺利完成目标跟踪任务。现有的研究大多集中在单目标跟踪领域,而对于多目标跟踪则相对较少,...

    Unity实时遮挡剔除 无需烘焙

    4. **优化**:为了提高效率,遮挡剔除通常会结合其他优化技术,如早停条件(尽早判断物体是否被遮挡)、批处理(将多个相似的物体合并为一个批次渲染)等。 5. **脚本控制**:在提供的三个脚本中,可能包含用于设置...

    遮挡情况下的视觉目标跟踪方法研究

    将目标整体相关匹配算法和目标各子块相关匹配作表决的算法相结合,有效解决了运动目标被遮挡的跟踪问题.目标被遮挡,表现为某些子...实验结果表明, 采用的两种算法互为补充,对解决遮挡情况下目标的视觉跟踪是有效的.</p>

    Janua, 3D 场景的开源遮挡剔除引擎.zip

    Janua, 3D 场景的开源遮挡剔除引擎 JANUA使用Janua加速 3D 场景 !Janua是一个自动门户和单元生成器,用于在 3D 个场景中执行遮挡剔除。 Janua计算场景中可能可见的设置( PVS ) 并将它的保存到在运行时查询的文件中...

    Unity Shader 被遮挡的部分半透高亮显示

    这种技术在一些特殊场景中很有用,例如增强物体的深度感知或者创建独特的视觉风格。 首先,我们需要理解遮挡检测(Occlusion Culling)。在3D环境中,遮挡检测是一种优化技术,用于判断一个物体是否被其他物体遮挡...

    论文研究-遮挡情况下的多目标跟踪算法.pdf

    为了在遮挡条件下进行多目标跟踪,针对运动目标发生遮挡情况下的Mean Shift跟踪问题进行了研究,提出一种新的抗遮挡算法。利用卡尔曼滤波器来获得每帧Mean Shift算法的起始位置,再利用Mean Shift算法得到目标跟踪...

    iOS 键盘遮挡输入框万能解决方案(多个输入框)

    描述中提到的“OC 键盘遮挡输入框万能解决方案(多个输入框)”表明这是一个基于Objective-C(简称OC)语言的解决方案,适用于有多个局部变量输入框的场景。 首先,我们需要理解iOS中的Auto Layout机制。这是苹果为...

    相互遮挡的目标分割和跟踪

    在计算机视觉领域,目标跟踪和目标分割是两个重要的研究方向,尤其是在复杂场景下,例如多人互动或者存在遮挡的情况下。本文介绍了一种分布式、实时计算平台,用于跟踪多个动态交互的人体目标,旨在解决遮挡问题和...

    基于 YOLOv10 的复杂光照和遮挡条件下的行人实时检测系统(300多张图片+标签+演示视频+详细教程+整套源码)

    基于 YOLOv10 的复杂光照和遮挡条件下的行人实时检测算法研究(300多张图片+标签+演示视频+详细教程+整套源码),开箱即用,非常优质的资源! 基于 YOLOv10 的复杂光照和遮挡条件下的行人实时检测算法研究(300多张...

    遮挡环境下GPS_GLONASS_Galileo组合PPP性能分析.pdf

    总结来说,遮挡环境下GPS、GLONASS和Galileo的多系统融合PPP可以显著提高定位性能,缩短收敛时间,增强定位稳定性。随着多频多系统的广泛应用,这种融合技术对于城市环境中的精准定位服务具有重要意义,广泛应用于...

    【论文】遮挡下人脸的检测分析

    这篇标题为“遮挡下人脸的检测分析”的论文,深入探讨了在遮挡情况下如何有效地进行人脸目标检测,这对于提升人脸识别系统的鲁棒性和准确率至关重要。在安防监控和金融自助设备(如ATM机)等领域,人脸遮挡的情况...

Global site tag (gtag.js) - Google Analytics