在花栗鼠中设置简单的矩形碰撞时遇到问题

时间:2013-04-08 22:58:02

标签: ruby collision-detection chipmunk libgosu

最近我一直试图创造一些我一直想要的东西,但从未有过技巧和时间 - 计算机游戏。更准确地说,是我最喜欢的游戏之一的致敬/克隆。首先,我决定创建一个基于Castlevania系列的经典2D平台。

作为Ruby程序员,我决定使用Gosu。然后我决定不想重新发明轮子,所以我将使用Chipmunk

几天后,我最终遇到了无法解释的碰撞检测问题。我添加了边界框绘图功能,只是为了看看到底发生了什么。

enter image description here

正如你所看到的,贝尔蒙特与他不是非常接近的墙壁相撞。由于gosu gem附带的演示游戏工作正常,我一定有些不对劲,我可能不会真正了解如何定义多边形Shape并将其添加到空间中。我很确定这不是我画的地方。

游戏中有一个公共回购,因此您可以看到墙(Brush < Entity)和玩家(Player < Entity)是如何定义的,并且它们确实具有简单的矩形多边形形状。墙没有添加到空间(他们是流氓),只有玩家是。我已经尝试调试游戏,看看body位置在哪里,但一切都很好。

https://github.com/ellmo/castellvania

玩家缓慢下降,但你可以用向上/向左/向右箭头控制他。 Tilde按钮(~)显示boudning框,碰撞框应始终可见。

我需要一些帮助,试图了解我做错了什么。

1 个答案:

答案 0 :(得分:0)

  

我可能并不真正了解如何定义多边形形状并将其添加到空间中。我很确定这不是我画的地方。

就是这样。形状坐标被添加到身体位置,而不是从身体位置减去。 在Entity.boundaries替换

verts << CP::Vec2.new(@shape.body.p.x - @shape[vert].x, @shape.body.p.y - @shape[vert].y)

verts << CP::Vec2.new(@shape.body.p.x + @shape[vert].x, @shape.body.p.y + @shape[vert].y)

你会得到正确的照片。 (绘图仍然会被打破,但边界框将是正确的。