1

目前,在 cocos2d 中,我有一个应用程序可以执行以下操作:

以空白屏幕启动。当我点击屏幕时,我会弹出一个圆圈。当我握住圆圈时,圆圈将继续以恒定的速度增长。然而,尽管 sprite 正在增长,但 box2d 物理体却没有,这意味着 sprite 不会与其他物体发生碰撞。我一直在试图找出一种方法来改变随精灵缩放的半径,但对于 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 回答