gpt4 book ai didi

c++ - 具有可变地形的 2D 静态盒碰撞

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:26 25 4
gpt4 key购买 nike

我正在开发一个 2D 游戏,其中地形可以变化并且由除自相交的多边形之外的任何形状的多边形组成。玩家碰撞盒呈正方形,可以四处移动。我的问题是:如何让一个始终直立的盒子与多变的地形发生碰撞并始终保持在外面?

虽然没有代码,但我目前采用的方法如下所示:

prototype

蓝色方 block 是玩家的碰撞箱。首先,以向下运动为例。我的目标是找到其行进路径中可以安全地位于地形多边形之外的最高点。我测试了它行进路径内的所有地形顶点并将它们转换到盒子的速度。我采用最远的投影。

最远的投影将是在不进入地形的情况下允许移动的最大距离。

将正方形沿速度方向移动一段距离并完成。

但是,我遇到过一些不起作用的情况。以此为例:

Failure of algorithm

为了纠正这种情况,我现在测试正方形的一个角。如果到角的距离比最远的投影短,那么该距离将给出适当的距离偏移。这几乎使算法得到了充分证明。除非有人声明另一个异常(exception)。

我有点发疯了,我会很感激对我的算法的反馈。如果有人对地形上的 2D 直立盒碰撞或任何类似内容有任何建议或好的读物,那就太好了。

最佳答案

This可能会有用,这里我将快速详细说明“直立”方 block 碰撞。

首先碰撞可能发生在正方形的边上,不一定是拐角处。检查任何碰撞的一个简单解决方案是描述由正方形分隔的区域,然后检查不平坦地形的任何点是否在该区域内。

要定义正方形区域,假设您的直立正方形具有角 (x1,y1)、(x2,y1)、(x2,y2)、(x1,y2),其中 x2>x1y2>y1。然后要使点 (x,y) 位于正方形内,它需要满足条件

If( x1< x < x2 and y1< y <y2) Then (x,y) is in the square.

那么总而言之,您需要做的就是检查地形上是否有任何点满足上述条件。祝你好运。

关于c++ - 具有可变地形的 2D 静态盒碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17939411/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com