2011-04-03 15 views
1

我正在研究iPhone游戏,地面是一个长而重复的矩形子画面对象,它延伸到屏幕底部以上约30个像素处。我试图将我的地面边缘形状调整为30像素,这样当玩家精灵从跳跃落到地面时,他会落在地面图像的顶部。当我试图加入以下代码,它不工作:Box 2D - 是否有办法让地面移动b2EdgeShape up

b2BodyDef groundBodyDef; 
groundBodyDef.position.Set(0, 30/PTM_RATIO); 

b2Body *groundBody=world->CreateBody(&groundBodyDef); 

b2EdgeShape groundLine; 
groundLine.Set(b2Vec2(0, 30/PTM_RATIO), b2Vec2(screenSize.width/PTM_RATIO, 30/PTM_RATIO)); 
groundBody->CreateFixture(&groundLine, 0); 

我知道我大概可以使用矩形形状的地面,但因为我的球员精灵仅与图像的顶部碰撞,我宁愿摆脱边缘形状。

+0

这看起来很好。代码中必须存在其他问题。发生了什么问题?你的玩家穿过地面还是什么?你的球员的体型(动态?)是什么?你如何移动你的球员? – Tayyab 2011-04-04 08:26:11

+0

我正在用重力使我的球员(动态身体)下降。它忽略了30 y点,而是与0 y点碰撞 – Scott 2011-04-04 15:36:24

回答

4

当您设置形状的位置(例如在您的示例中为groundLine.Set())时,您将设置位置相对于它将附加到的身体位置。所以你的身体已经在y = 30了,那么你的身体将会是另一个30以上的身体。

对于地面身体,我建议只需将身体位置保持在0,0,然后在您想要的位置添加固定装置 - 通常只有一个地面身体。

我还建议使用默认的调试绘制,以便您可以看到实际发生的情况,会立即向您显示问题。

相关问题