2013-04-24 48 views
0

我有一个问题,正在杀死我...旋转身体和附加精灵在box2d

我正在使用LevelHelper在Box2d中创建一个关卡。所以我有一个三角形的精灵贴在三角形的身体上。

现在的问题是我想旋转身体到一个位置,并旋转附加的精灵。

在这里,你有一些代码:

//Detecting my actor and my sprite 
if (b->GetType() == b2_dynamicBody && myActor == [loader spriteWithUniqueName:@"radar."]){ 
     radar = b; 
     radarSprite = myActor; 
    } 

只是想尝试用20度,但它不转动。

//trying to rotate inside TICK: Method 

    float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
    radar->SetTransform(radar->GetPosition(), b2Angle); 
    radarSprite.position = ccp(radar->GetPosition().x,radar->GetPosition().y); 

任何提示?

非常感谢您提前!

回答

1

你的错误,你只旋转的物理机构,levelhelper必须在LHSprite的方法称为tranformRotation,所以你需要做:

这种方法旋转体和精灵(如果身体重视精灵):

//radarSprite is a LHSprite 
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
[radarSprite transformRotation:b2Angle]; 
[radarSprite transformPosition:ccp(radar->GetPosition().x,radar->GetPosition().y)]; 

如果你有身体精灵分开,你可以这样做:

//radarSprite is a LHSprite 
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
radar->SetTransform(radar->GetPosition(), b2Angle); 
[radarSprite transformRotation:b2Angle]; 
[radarSprite transformPosition:ccp(radar->GetPosition().x,radar->GetPosition().y)]; 


编辑:

方法spriteWithUniqueName返回LHSprite,但如果你使用CCSprite你可以这样做:

//radarSprite is a CCSprite 
float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(20); 
radar->SetTransform(radar->GetPosition(), b2Angle); 
[radarSprite setRotation:b2Angle]; 
[radarSprite setPosition:ccp(radar->GetPosition().x,radar->GetPosition().y)]; 
+0

它看起来很漂亮,我要下载LHSprite.h因为我不工作那个班。我会在稍后尝试。非常感谢你! – mursang 2013-04-24 18:00:24

+0

现在它不在这里工作:if(b-> GetType()== b2_dynamicBody && myActor == [loader spriteWithUniqueName:@“radar。”]){ radarSprite =(LHSprite *)b-> GetUserData() ; } – mursang 2013-04-24 22:38:34

+0

方法spriteWithUniqueName返回一个LHSprite,但是如果你使用CCSprite,你可以使用第二个选项并替换“变换”为“set”....编辑该消息。 – busta117 2013-04-25 04:11:29