0

我想在我的游戏中创造一片土地。土地由一些名为“ground1.png”、“ground2.png”等的图片组成。我使用 PhysicsEditor 用这些图片绘制 b2Fixture 的形状。问题是如何设置这些形状的位置。土地就像“ground1.png”之后的“ground2.png”和“ground2.png”之后的“ground3.png”。但是, addFixturesToBody() 是不合适的。

GB2ShapeCache::sharedGB2ShapeCache()->addFixturesToBody(land, "ground1");
GB2ShapeCache::sharedGB2ShapeCache()->addFixturesToBody(land, "ground2");

不幸的是,名为“ground2”的形状将覆盖名为“ground2”的形状。我在“ground1”之后想要“ground2”。我可以通过使用 PhysicsEditor 或编码来实现这个想法吗?

4

1 回答 1

0

您必须为每个地面段使用单独的实体。PE 不是制作整个世界碰撞形状的正确工具(至少现在还不是)。

尽管对于 Box2D 的接触检测算法而言,在单个物体上使用多个大形状可能非常低效。除了性能之外,当您将身体移动到两个连接点上时可能会出现问题(即使在平坦的地形上身体也会卡住)。阅读Box2D 手册中关于链形状的部分

真正创建世界碰撞形状的最佳方法是使用一系列连接的 b2ChainShape 形状。不幸的是,你不能用 PhysicsEditor 创建那些。PE 内部使用 b2PolygonShape 和 b2CircleShape。

然而追踪世界的轮廓并非易事,寻找轮廓追踪算法。因此,也许最好的折衷办法是用 PE 创建多边形形状,然后从中得到适当间隔的链形状。您可能需要为此修改 GBShapeCache 代码,如果只是为了公开其形状列表。

于 2013-10-09T16:16:46.427 回答