如何根据行走/站立的坡度平滑旋转角色?

时间:2012-05-02 09:02:44

标签: box2d game-physics box2d-iphone physics-engine

我需要根据他(一个矩形)站立或行走的平台范围来旋转角色精灵。我通过根据他站在的平台的坡度旋转它来实现这种效果。但有两个问题:

首先,旋转不顺畅。当角色从一个平台走到一个倾斜的平台上时,它会立即旋转,并且由于旋转它会被推高一点。

其次,一旦他从斜坡上走下来并再次进入平台,我就无法相应地旋转角色。这是因为在那一点上角色会与平台和倾斜平台碰撞(它们被放在一起),所以对于几个步骤,角色将来回疯狂地旋转,因为两个碰撞检测功能一起工作。 / p>

我试图通过检测角色的面部来解决它,并试图弄清楚他的哪个点(左或右)首先接触到某些东西,但它不起作用,因为我只能检测到碰撞,但不是“当角色离开某个平台时没有碰撞“或”。

我附上了一份情况说明。请帮忙,谢谢!

PS:由于我不允许发布图片,请访问:http://i.stack.imgur.com/jqPjt.png获取图片。感谢。

2 个答案:

答案 0 :(得分:2)

您的轮换似乎已关闭。您需要围绕字符矩形的基础旋转。这可以解决你的一些问题,但不是全部。

需要处理角色与2个平台接触的情况。目前我猜你只是直接从平台中提取角度并将其分配给角色。这不会削减它,因为当你有不同的接触点时你需要任意角度。

解决方案是在2个接触点之间创建一个向量,然后获取向量x,y的组件并调用atan2(x, y)。这将以弧度给出触点之间的角度。确保你正确地获得参数!游戏开发需要你知道三角学和矢量数学。这里发生的是我们创建一个轴对齐的直角三角形,斜边由两个接触点定义,然后我们翻转三角形并通过交换x和y分量使用tan = opp/adj获得角度

请注意,您需要确保始终以特定顺序给出接触点,否则您将以奇怪的角度旋转,因为您创建的三角形将面向另一个方向。您可能需要先执行基于x坐标排序的操作。

答案 1 :(得分:1)

此示例的简单解决方案是对角落进行碰撞检测,而不是对整个对象进行碰撞检测。您可以在触摸的点上旋转对象,使得该点仅切割触摸的点。此解决方案仅在您向上倾斜时才起作用,而不是向下倾斜。为了解决这个问题,您还可以在侧面进行碰撞检测。然后,您可以在触摸角上旋转,使其与侧面接触。