2013-02-03 33 views
1

我有添加到場景中的sprite的batchnode。這些精靈的位置是從batchende的位置偏離的,所以我可以將它們圍繞批處理節點旋轉。將sprite添加到sprite節點會導致sprite位置發生變化

當我將這些精靈附加到任何這些精靈上時,它們在屏幕上的位置發生更改時會出現問題。

balloon1 = [CCSprite spriteWithSpriteFrameName:@"1.png"]; 
    balloon1.position = ccp(30,30); 
    balloon1.tag = 10; 
    //balloon1.anchorPoint = ccp(1.1,0.7); 
    [spriteNode addChild:balloon1]; 

    b2BodyDef balloonBodyDef; 
balloonBodyDef.type = b2_dynamicBody; 
balloonBodyDef.position.Set((160 + balloon1.position.y)/PTM_RATIO, (240 -   balloon1.position.x)/PTM_RATIO); 
balloonBodyDef.userData = balloon1; 
b2Body *balloonBody = world->CreateBody(&balloonBodyDef); 

b2PolygonShape balloon; 
    balloon.SetAsBox((balloon1.contentSize.width/PTM_RATIO/2), 
       (balloon1.contentSize.height/PTM_RATIO/2)); 


// Create shape definition and add to body 
b2FixtureDef laserGunShapeDef; 
laserGunShapeDef.shape = &laser; 
//laserGunShapeDef.density = 0.0f; 
//laserGunShapeDef.friction = 10.0f; 
//laserGunShapeDef.restitution = 0.0f; 

b2Fixture *balloonFixture = balloonBody->CreateFixture(&laserGunShapeDef); 

如果我添加了氣球一樣從文件中的精靈,這個工程確定,但是當其作爲上述做了,那麼氣球移開屏幕。

任何想法,將不勝感激。

回答

0

變化

balloonBodyDef.position.Set((160 + balloon1.position.y)/PTM_RATIO, (240 -   balloon1.position.x)/PTM_RATIO); 

balloonBodyDef.position.Set(balloon1.position.x/PTM_RATIO, balloon1.position.y/PTM_RATIO); 

也處理蜱方式的位置更新。

balloon1.position = ccp(balloonBody->GetPosition().x * PTM_RATIO, 
          (balloonBody->GetPosition().y) * PTM_RATIO); 
+0

嗨,感謝您的回覆,但我仍然有同樣的問題。如果將一個精靈添加到場景中,該代碼可以工作,但如果我從一個batchnode添加一個精靈,那麼精靈似乎會偏移。 –

+0

try spriteNode.position = ccp(0.0f,0.0f); – Guru

0

我只是猜測,但它可能是因爲spriteNode的位置。由於精靈連接到精靈節點,因此(30,30)與精靈節點的位置相關,而不是實際的世界座標。

所以,儘量使用

CGPoint worldCoordinate = [spriteNode convertToWorldSpace: balloon1.position]; 
balloonBodyDef.position.Set(worldCoordinate.x/PTM_RATIO, worldCoordinate.y/PTM_RATIO); 

和像大師說,不要忘記更新你的精靈的上打鉤方法的位置。如果這不起作用,那麼這是一個瘋狂的猜測,它應該沒有關係......但是先嚐試設置身體的位置,然後從該身體設置氣球的位置。

反正希望這有助於。