2013-07-01 60 views
1

我想用box2d在cocos2d-x中制造坦克。一切工作正常,但当我画坦克,桶在中间,因为你可以在图片中看到。Cocos2dx,box2d坦克

enter image description here

要绘制坦克,我设定的位置位于屏幕的中心,罐体被吸入后,我想提请桶,我给它的屏幕+相同的偏移中心关节(关节位于正确的位置)。 两个锚点,油箱和桶都在(0.5,0.5)上,因为我使用的是与我预期的接头相同的偏移量,桶在正确的位置被绘制,但不是。

我的代码:

// Create sprite and add it to the layer 
    CCSprite *tank = CCSprite::create(); 
    //tank->initWithFile("Tanks/001/tank.png"); 
    tank->setPosition(pos); 
    tank->setTag(1); 
    this->addChild(tank); 

    // Create ball body 
    b2BodyDef tankBodyDef; 
    tankBodyDef.type = b2_dynamicBody; 
    tankBodyDef.position = toMeters(&pos); 
    tankBodyDef.userData = tank; 

    b2Body *tankBody = _world->CreateBody(&tankBodyDef); 

    // Create shape definition and add body 
    shapeCache->addFixturesToBody(tankBody, "001/tank"); 


    // Create sprite and add it to the layer 
    CCSprite *barrel = CCSprite::create(); 
    //barrel->initWithFile("Tanks/001/barrel.png"); 
    barrel->setPosition(CCPointMake(pos.x + 77, pos.y+117)); 
    barrel->setTag(2); 
    this->addChild(barrel); 

    // Create barrel body 
    barrelBodyDef.type = b2_dynamicBody; 
    barrelBodyDef.userData = barrel; 
    barrelBodyDef.position = b2Vec2(tankBodyDef.position.x + 2.40625, tankBodyDef.position.y + 3.65625); // = same offset as joint!?!?! 
    b2Body *barrelBody = _world->CreateBody(&barrelBodyDef); 

    // Create shape definition and add body 
    shapeCache->addFixturesToBody(barrelBody, "001/barrel"); 



    // Create a joint 
    // 
    b2RevoluteJointDef armJointDef; 
    //armJointDef.Initialize(tankBody, barrelBody, b2Vec2(400.0f/PTM_RATIO, 450/PTM_RATIO)); 
    armJointDef.bodyA = tankBody; 
    armJointDef.bodyB = barrelBody; 
    armJointDef.localAnchorA.Set(2.40625, 3.65625); 
    armJointDef.localAnchorB.Set(-2.90625, -0.125); 

    armJointDef.enableMotor = true; 
    armJointDef.enableLimit = true; 
    armJointDef.motorSpeed = 10; 
    armJointDef.referenceAngle = CC_DEGREES_TO_RADIANS(0); // begin graden 
    armJointDef.lowerAngle = CC_DEGREES_TO_RADIANS(-50); // max graden naar beneden 
    armJointDef.upperAngle = CC_DEGREES_TO_RADIANS(00); // max graden naar boven 
    armJointDef.maxMotorTorque = 48; 

    armJoint = (b2RevoluteJoint*)_world->CreateJoint(&armJointDef); 

我希望有人得到了一个答案:)

回答

0

问题解决了:),我不得不添加偏移桶锚太大,现在是正确的位置上。