1

我有一批精灵被添加到场景中。这些精灵的位置偏离了批处理的位置,因此我可以围绕批处理节点的点旋转它们。

当我将 B2Body 附加到这些精灵中的任何一个时,就会出现问题,它们在屏幕上的位置会发生变化。

    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);

如果我将气球添加为文件中的精灵,这可以正常工作,但是当它按照上述方式完成时,气球会移出屏幕。

任何想法,将不胜感激。

4

2 回答 2

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);
于 2013-02-03T14:21:58.710 回答
0

我只是猜测,但这可能是因为 spriteNode 位置。由于精灵是附在精灵节点上的,(30, 30) 是相对于精灵节点的位置,而不是实际世界的坐标。

所以,尝试使用

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

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

无论如何希望这会有所帮助。

于 2013-02-04T09:44:58.127 回答