Cocos2dx,box2d坦克

时间:2013-07-01 21:29:48

标签: c++ box2d cocos2d-x

我正在尝试使用box2d在cocos2d-x中制作一个坦克。一切正常,但是当我画出坦克时,镜筒位于中间,如图所示。

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

我希望有人得到答案:)

1 个答案:

答案 0 :(得分:0)

问题解决了:),我不得不添加桶锚的偏移量,现在它位于正确的位置。