3

我有一组 Sprite,允许用户移动在 ccTouchesMoved 中处理。

当用户选择了其中一个精灵(通过触摸它)时,他们可以选择使用 ccTouchesMoved 方法旋转精灵,直到他们取消选择旋转功能。

精灵可以正确旋转,但是我有另一种方法可以在精灵周围创建边缘,这样它们就有了碰撞的能力,什么没有。

调用此方法时,它会重置我所有 Sprite 的旋转,将它们设置回 0,我不知道为什么。

 for (CCSprite *sprite in bounceBarriers)
    {
        curBarrier = sprite;
        curBarrier.rotation = 20;
        [self bounceCreator];
    }

//bounceCreator:

b2BodyDef barrierBodyDef;
barrierBodyDef.type = b2_staticBody;
barrierBodyDef.position.Set(curBarrier
                            .position.x/PTM_RATIO, curBarrier.position.y/PTM_RATIO);
barrierBodyDef.userData = curBarrier; //the userData is set to the current sprite

_body2 = _world->CreateBody(&barrierBodyDef);
barrierBodyDef.position.Set(0,0);

b2Body *barrierBody;
barrierBody = _world->CreateBody(&barrierBodyDef);

b2EdgeShape barrierEdge;
b2FixtureDef barrierShapeDef;
barrierShapeDef.shape = &barrierEdge;
barrierShapeDef.friction = 1.0f;
barrierShapeDef.restitution = 1.0f;
barrierEdge.Set(b2Vec2((curBarrier.position.x-70)/PTM_RATIO, (curBarrier.position.y+10)/PTM_RATIO),
                b2Vec2((curBarrier.position.x-70)/PTM_RATIO, (curBarrier.position.y-10)/PTM_RATIO));
barrierBody->CreateFixture(&barrierShapeDef);
barrierEdge.Set(b2Vec2((curBarrier.position.x-70)/PTM_RATIO, (curBarrier.position.y-10)/PTM_RATIO),
                b2Vec2((curBarrier.position.x+70)/PTM_RATIO, (curBarrier.position.y-10)/PTM_RATIO));
barrierBody->CreateFixture(&barrierShapeDef);
barrierEdge.Set(b2Vec2((curBarrier.position.x+70)/PTM_RATIO, (curBarrier.position.y-10)/PTM_RATIO),
                b2Vec2((curBarrier.position.x+70)/PTM_RATIO, (curBarrier.position.y+10)/PTM_RATIO));
barrierBody->CreateFixture(&barrierShapeDef);
barrierEdge.Set(b2Vec2((curBarrier.position.x+70)/PTM_RATIO, (curBarrier.position.y+10)/PTM_RATIO),
                b2Vec2((curBarrier.position.x-70)/PTM_RATIO, (curBarrier.position.y+10)/PTM_RATIO));
barrierBody->CreateFixture(&barrierShapeDef); 
4

1 回答 1

2

同时更新 b2body 的旋转。

   body->SetTransform([self toB2Meters: sprite.position], -1*CC_DEGREES_TO_RADIANS(20));
于 2013-03-29T11:13:56.483 回答