【问题标题】:move dynamic body object in box2d when touchbegintouchbegin 时在 box2d 中移动动态主体对象
【发布时间】:2015-01-12 10:33:43
【问题描述】:

我正在 cocos2d-x 中使用 box2d 创建一个类似弹跳球的游戏。我创建了一个动态身体对象,我希望它在触摸开始时移动。我正在使用以下代码来移动动态主体,但它没有移动。请任何人都可以帮助我解决问题。

bullet2=CCSprite::create("block.png");
bullet2->setPosition(ccp(2740, 1220));
this->addChild(bullet2,0);

ballBodyDefB.type=b2_dynamicBody;
ballBodyDefB.position.Set(2740/PTM_RATIO, 1170/PTM_RATIO);
ballBodyDefB.userData=bullet2;
ballBodyDefB.gravityScale=0;
_bullet=_world->CreateBody(&ballBodyDefB);

b2PolygonShape bulletshape;
bulletshape.SetAsBox(bullet2->getContentSize().width/PTM_RATIO/2,
                     bullet2->getContentSize().height/PTM_RATIO/2);

b2FixtureDef b_bullet ;
b_bullet.shape = &bulletshape;
b_bullet.density = 1.0f;
b_bullet.friction = 0.1f;
b_bullet.restitution = 0.0;
_bullet->CreateFixture(&b_bullet);

CCTouchbegan:

b2Vec2 force = b2Vec2(0, -450);
_block->ApplyLinearImpulse(force, _block->GetPosition());

【问题讨论】:

    标签: cocos2d-x box2d game-physics


    【解决方案1】:

    嗨,移动跟随 b2body 的精灵很容易。您需要将 Sprite 附加到 b2body.userData 并在 box2d 世界步骤中将您的 sprite 的位置和旋转与您的 b2body 同步。 我无法直接回答您的问题,请发布您的代码以及您拥有的 cocos2d-x 版本以获取更多详细信息:

    检查您的代码是否包含以下代码:(取决于 cocos2d-x 版本,您使用的是 3.2 中已弃用的 CCSprite,无论如何我们只使用 Sprite)

    • box2d 世界(您已经拥有 _world)
    • _世界步迭代
    • 将精灵位置与 b2body 同步

    无论如何,您都可以在这些链接中找到更多详细信息: http://www.cocos2d-x.org/wiki/Box2Dhttp://www.cocos2d-x.org/wiki/Getting_Started_with_Cocos2d-x

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多