Objective c 如何手动更改实体的特征?
我有一个正在成长的身体。我把这个身体添加到世界上Objective c 如何手动更改实体的特征?,objective-c,ios,cocos2d-iphone,box2d,textures,Objective C,Ios,Cocos2d Iphone,Box2d,Textures,我有一个正在成长的身体。我把这个身体添加到世界上 ... someBody = world->CreateBody(&bodyDef); someFixture = tapBody->CreateFixture(&someFixtureDef); ... 我想我不需要在这里粘贴所有代码 所以我把身体添加到这个世界上。问题是如何改变立场,恢复原状。。。已经存在于世界上的身体?我可以在这里这样做吗?(因为当我试图在勾选方法中更改某些内容时,会出现错误) 首先,在“勾选”
...
someBody = world->CreateBody(&bodyDef);
someFixture = tapBody->CreateFixture(&someFixtureDef);
...
我想我不需要在这里粘贴所有代码
所以我把身体添加到这个世界上。问题是如何改变立场,恢复原状。。。已经存在于世界上的身体?我可以在这里这样做吗?(因为当我试图在勾选方法中更改某些内容时,会出现错误)
首先,在“勾选”方法中,确保设置了“速度”和“位置”迭代,然后查看所有修改它们的实体:
-(void)update:(ccTime)dt {
int32 velocityIterations = 8;
int32 positionIterations = 3;
world->Step(dt, velocityIterations, positionIterations);
for(b2Body *b = world->GetBodyList(); b != NULL; b = b->GetNext()) {
//Do something with the body for example: b->ApplyLinearImpulse...();
}
}
查看box2d文档中移动box2d主体的方法,例如->ApplyLinerImpuse->ApplyForce…如果要显式设置位置和角度,请查看->SetTransform()
我希望这有帮助!
Tams也许你可以通过破坏和创建一个新的固定装置来完成你所需要的,而不是破坏和重建整个身体
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
// This assumes you only have one fixture
b2Fixture* f = b->GetFixtureList();
f = f->GetNext();
// Code here to create a new fixture/shape with different size (or whatever)
// Destory old fixture and create new one
b->DestoryFixture(f);
b2Fixture* someFixture = b->CreateFixture(&someFixtureDef);
}
对不起,有任何打字错误。。。还没有测试过这些…谢谢,但我使用了这些方法)它们只能改变身体的位置,给予一些支持,等等。我需要改变身体形状的大小。(b2CirlceShape shape;shape.m_radius=…我在创建对象时使用它,是否可以以某种方式更新半径?)。我有一个正在增长的对象,我想知道如何做)我必须在我的应用程序中使用一个附加在身体上的挤压手势来调整精灵的大小。我最终做的是为每一次重复的挤压破坏和重建一个新的身体。这是非常快,工作得很好。也许这对你有用。真的很感谢)正如我所理解的那样,在每次迭代中销毁尸体并再次将其保存是唯一的决定。。
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
// This assumes you only have one fixture
b2Fixture* f = b->GetFixtureList();
f = f->GetNext();
// Code here to create a new fixture/shape with different size (or whatever)
// Destory old fixture and create new one
b->DestoryFixture(f);
b2Fixture* someFixture = b->CreateFixture(&someFixtureDef);
}