当touchbegin在box2d中移动动态body对象

时间:2015-01-12 10:33:43

标签: cocos2d-x box2d game-physics

我正在使用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());

1 个答案:

答案 0 :(得分:0)

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

检查您的代码是否包含以下代码:(依赖于cocos2d-x版本,您使用3.2中不推荐使用的CCSprite,我们只使用Sprite)

  • box2d world(你已经_world)
  • _world step iteration
  • 将精灵位置与b2body同步

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