0

最近我一直在尝试创造一些我一直想要的东西,但从来没有技术和时间去做——电脑游戏。更准确地说,是我最喜欢的游戏之一的致敬/克隆。首先,我决定创建一个基于恶魔城系列的经典 2D 平台。

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

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

在此处输入图像描述

正如你所看到的,贝尔蒙特撞到了他无法触及的墙块。由于 gosu gem 附带的演示游戏运行良好,我一定是做错了什么,我可能真的不明白如何Shape定义多边形并将其添加到空间中。我很确定这不是我画它的地方。

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

https://github.com/ellmo/castellvania

玩家慢慢跌倒,但你可以用上/左/右箭头控制他。波浪号按钮 ( ~) 显示边界框,并且碰撞框应该始终可见。

我需要一些帮助来了解我做错了什么。

4

1 回答 1

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)

你会得到正确的图片。(绘图仍会损坏,但边界框将是正确的。

于 2013-05-16T19:43:51.353 回答