2013-02-03 36 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); 

和像大师说,不要忘记更新你的精灵的上打钩方法的位置。如果这不起作用,那么这是一个疯狂的猜测,它应该没有关系......但是先尝试设置身体的位置,然后从该身体设置气球的位置。

反正希望这有助于。