在我的Box2d游戏中,我发现我必须在游戏循环中更新我的CCSprite位置才能正常工作。我查看了Box2D文档,看看有哪些API来获取b2Body坐标,但我没有看到任何东西,这似乎不清楚。 我应该手动移动每个CCSprite还是有一种简单的方法可以将屏幕上的所有CCSprite移动到与它们相关的b2Bodys上?
有没有人知道如何做到这一点?
谢谢!
EDIT1: 这段代码会将我世界上的每个精灵更新为与它们对应的b2Body吗?这将适用于x和y轴并且旋转正确吗?
for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData();
b2Vec2 b2Position = b2Vec2(sprite.position.x/PTM_RATIO,
sprite.position.y/PTM_RATIO);
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation);
b->SetTransform(b2Position, b2Angle);
}
}
答案 0 :(得分:3)
只需这样做:
在你的init类中安排这样的tick方法
[自我安排:@selector(tick :));
-(void)tick: (ccTime) dt
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL)
{
CCSprite *spr= (CCSprite*)b->GetUserData();
CCSprite *myActor = (CCSprite*)b->GetUserData();
myActor.position = CGPointMake( b->GetPosition().x * PTM_RATIO, b->GetPosition().y * PTM_RATIO);
myActor.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}
}