首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滑动AABB碰撞-边缘卡住

滑动AABB碰撞-边缘卡住
EN

Stack Overflow用户
提问于 2010-10-10 22:31:21
回答 4查看 4.6K关注 0票数 6

我正在开发一个基于3D瓷砖的游戏,我使用的是AABB碰撞检测。对于玩家正在相交的每一个立方体,我发现玩家与立方体相交最少的轴,并沿着那个轴将播放器从立方体中推出来。

根据多维数据集签入的顺序,这可能在沿多个多维数据集的边缘滑动时造成问题。我创建了一个图表来解释这个问题:

http://imgur.com/mmK0W.png

  • 箭头#1是玩家尝试的动作。其他箭头是碰撞响应。在左边图中的
  • 中,首先对右立方体进行碰撞测试,导致玩家被推到左边,然后向上推。(bad)
  • In右侧图,首先对左立方体进行碰撞测试,导致播放器被向上推,此时播放机不再与另一个多维数据集相交。(good)

对于解决这个问题最有效的方法,有什么想法吗?或者有什么更好的方法来处理碰撞反应?

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-10-11 01:33:16

一个离散的实现迫使您在系统中注入一些连续的数学,只有在需要时(多维数据集/方向重叠)。

对于每个立方体c1,c2 ..。在检查时,用户多维数据集(uc)与之交叉的ci,您想知道哪个多维数据集首先被“触摸”--只有一个,就像在现实生活中一样。考虑uc的d方向,取词中uc的数量(重叠),找出cu在“触碰”词时的位置。

确定哪个立方体被“触摸”了第一个cj (在d轴上需要最多回滚的那个--时间越快),并且只使用这个来计算碰撞反应。

不仅你会达到精确。但是如果所有的立方体都在移动,有不同的速度等等,它会有帮助。

票数 4
EN

Stack Overflow用户

发布于 2010-10-11 00:33:01

从您的图表,它似乎您想要最小的移动,以尽量减少球员和立方体之间的重叠。每个重叠的立方体都会尝试将玩家“推”到两个正交的方向。你能在每个方向上选择最大推力的最小推力吗?

票数 0
EN

Stack Overflow用户

发布于 2010-10-11 01:43:15

当您的两个(或更多)固定立方体可以组合成一个较大的矩形时,您可能会实现一种混合的宽阶段。首先对较大的矩形进行测试。它将给你的绿色检查标记的结果,并比检查每个立方体更快无论如何。然后,在此之后,只有在需要的情况下,检查单个多维数据集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3902492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档