1

シーンに追加されるスプライトのバッチノードがあります。これらのスプライトの位置は、batchnde の位置からオフセットされているため、batch ノードのポイントを中心に回転させることができます。

これらのスプライトのいずれかに 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);

tick メソッドで位置の更新も処理します。

balloon1.position = ccp(balloonBody->GetPosition().x * PTM_RATIO,
                            (balloonBody->GetPosition().y) * PTM_RATIO);
于 2013-02-03T14:21:58.710 に答える