Я создаю приложение, в котором я пытаюсь присоединиться к двум телам таким образом, что, когда я перемещаю одно тело, второе тело должно быть перемещено в пределах первого тела.Присоединиться к двум блокам Box2d
Вот мой код, чтобы создать тело:
- (b2Body *)addBoxBodyForDynamicSprite:(CCSprite *)sprite {
b2BodyDef spriteBodyDef;
spriteBodyDef.type = b2_dynamicBody;
//spriteBodyDef.position.Set(sprite.position.x/PTM_RATIO, sprite.position.y/PTM_RATIO);
CGPoint asolutePoint = [sprite.parent convertToWorldSpace:sprite.position];
spriteBodyDef.position.Set(asolutePoint.x/PTM_RATIO, asolutePoint.y/PTM_RATIO);
spriteBodyDef.userData = (__bridge void*)sprite;
b2Body *spriteBody = world->CreateBody(&spriteBodyDef);
b2PolygonShape spriteShape;
spriteShape.SetAsBox(sprite.contentSize.width/PTM_RATIO/2,
sprite.contentSize.height/PTM_RATIO/2);
b2FixtureDef spriteShapeDef;
spriteShapeDef.shape = &spriteShape;
spriteShapeDef.density = 0.3;
spriteShapeDef.isSensor = true;
spriteBody->CreateFixture(&spriteShapeDef);
return spriteBody;
}
Одно тело кинематическая и другое тело Dynamic. Я двигаюсь эти тела с помощью:
theBody->SetTransform(locationWorld, theBody->GetAngle());
Если я применить линейную силу здесь, тела не двигаются & Объединенный, который я использовал, чтобы исправить их в b2WeldJoint
.
b2JointDef jointDef;
jointDef.bodyA = another;
jointDef.bodyB = leftHandFixBody;
aJoint = (b2Joint *)world->CreateJoint(&jointDef);
Он перемещает динамическое тело, но кинематическое тело остается на своем месте. Я хочу переместить оба тела вместе. Любая помощь будет действительно оценена. Благодаря!
Здесь много указателей. Избегайте использования указателей и вашей жизни, поскольку программисту на C++ было бы легко. – Manu343726
Кинематические тела имеют бесконечный импульс, поэтому они не реагируют на силы или импульсы. Вы можете использовать SetLinearVelocity для их перемещения. (@Manu, что абсолютно неуместно и даже не верно). – iforce2d
@ iforce2d Спасибо за ваш ответ. Я уже пробовал setLinearVelocity, но он не двигал никаким телом. theBody-> SetLinearVelocity (locationWorld); –