1

現在、cocos2d には、次のことを行うアプリがあります。

空白の画面から始めます。画面をタップすると円がポップアップします。私が円を持っていると、円は一定の割合で成長し続けます。ただし、スプライトが成長しているにもかかわらず、box2d の物理的なボディは成長していません。つまり、スプライトは他のボディと衝突しません。スプライトに合わせてスケーリングする半径を変更する方法を見つけようとしていますが、cocos2d についてはそのような質問はありません。cocos2d 以外の box2d に気付きましたが、それらを翻訳するのに苦労しています。

//smile.position = ccp(touchLocation.x, touchLocation.y);
smile.scale = .05;
[self addChild:smile];


// b2BodyDef smileBodyDef;

smileBodyDef.type = b2_dynamicBody;
smileBodyDef.position.Set(touchLocation.x/PTM_RATIO, touchLocation.y/PTM_RATIO);
smileBodyDef.userData = smile;
smileBody = world->CreateBody(&smileBodyDef);
//Radius
b2CircleShape smileCircleShape;
int radius = 80;

//Fixture
smileFixtureDef.shape = &smileCircleShape;
smileFixtureDef.density = 0.00f;
smileFixtureDef.friction = .2f;
smileBody->CreateFixture(&smileFixtureDef);




if (CGRectContainsPoint(smileRect, touchLocation)) {
growForever = [CCRepeatForever actionWithAction: [CCScaleBy actionWithDuration: .5 scale:    1.2]];
[growForever setTag:1];
[smile runAction:growForever];
4

1 に答える 1

2

半径を変更するたびに、ボディ用に作成した b2Fixture に関連付けられたシェイプ オブジェクトを取得し、それに応じて新しい値を設定します。

fixture->GetShape()->m_radius = new_radius/PTM_RATIO;
于 2012-10-30T05:20:44.370 に答える