Всем привет, я разрабатываю игру с cocos2d v1, и я использую box2d. Я включаю отображение сетчатки. и я создаю ведро. Я хочу переместить ковш только по оси x, поэтому я сделал b2PrismaticJoint, но проблема в том, что ковш не подходит к земле. вот мой код: `CCSprite * tube = [CCSprite spriteWithFile: @" tube.png "]; tube.position = ccp (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2); [self addChild: трубка];

b2BodyDef bucketBodyDef;
bucketBodyDef.type = b2_dynamicBody;
bucketBodyDef.position.Set(tube.contentSize.width/PTM_RATIO, tube.contentSize.height/PTM_RATIO);
bucketBodyDef.userData = tube;
tubeBody = world->CreateBody(&bucketBodyDef);

b2PolygonShape bucketShape;
bucketShape.SetAsBox(tube.contentSize.width/2/PTM_RATIO, tube.contentSize.height/2/PTM_RATIO);


// Create shape definition and add to body
b2FixtureDef bucketShapeDef;
bucketShapeDef.shape = &bucketShape;
bucketShapeDef.density = 10.0f;
bucketShapeDef.friction = 0.4f;
tubeFixture = tubeBody->CreateFixture(&bucketShapeDef);


[self createTubeFixtures];


// Restrict bucket along the x axis
b2PrismaticJointDef jointDef;
b2Vec2 worldAxis(1.0f, 0.0f);
jointDef.collideConnected = true;
jointDef.Initialize(tubeBody, groundBody,
                    tubeBody->GetWorldCenter(), worldAxis); 
world->CreateJoint(&jointDef);`

Когда я снимаю соединение, все в порядке ... пожалуйста, посмотрите прикрепленное изображение. Благодарность!

With joint

Without joint

0
Jazzmanouch 27 Мар 2013 в 21:17

1 ответ

Лучший ответ

Я сделал небольшую ошибку, которая стоила мне двух дней !! и это было при установке координат тела: b2BodyDef bucketBodyDef; bucketBodyDef.type = b2_dynamicBody; ** bucketBodyDef.position.Set (tube.contentSize.width / 2 / PTM_RATIO, tube.contentSize.height / 2 / PTM_RATIO); ** bucketBodyDef.userData = tube; tubeBody = world-> CreateBody (& bucketBodyDef);

0
Jazzmanouch 4 Апр 2013 в 00:33