0
我想用box2d做一个像乒乓球一样的游戏。就像上面说的那样,有一个球和两个桨。其中一个桨由使用加速计的播放器移动。我有这个工作正常。另一方面,我希望第二个桨可以像某种可以抓住球并将其击回玩家的墙。自动移动一个精灵来捕捉另一个精灵
我的问题是球与重力和力的使用弹跳,所以我不知道我怎么能告诉第二桨移动的地方,球是为了赶它。目前,我的代码如下所示:
- (void)update:(ccTime) dt {
if(_isPaused == FALSE)
{
_world->Step(dt, 10, 10);
for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *sprite = (CCSprite *)b->GetUserData();
if(sprite.tag == 3)
{
[self schedule:@selector(moveObj:)interval:0.0];
b2Vec2 autoPos = b2Vec2(sprite.position.x/PTM_RATIO, sprite.position.y/PTM_RATIO);
float32 autoAngle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation);
b->SetTransform(autoPos, autoAngle);
}
}
}
std::vector<MyContact>::iterator pos;
for(pos = _contactListener->_contacts.begin(); pos != _contactListener->_contacts.end(); ++pos)
{
MyContact contact = *pos;
if((contact.fixtureA == _tPaddleFixture && contact.fixtureB == _ballFixture) || (contact.fixtureA == _ballFixture && contact.fixtureB == _tPaddleFixture))
{
_isHit = TRUE;
}
}
}}
-(void)moveObj:(ccTime)dt{
if(_isHit == TRUE)
{
//I need the code here
NSLog(@"HIT");
}
else
{
tPaddle.position = ccp(160, tPaddle.position.y);
}}
目前,我只是打印,如果桨和球应该发生碰撞(仅在中心)是说打的消息,但我不知道如何告诉tPaddle可以移动到任何地方,抓住它。有人可以给我一个想法,我怎么能实现这一点?提前致谢。
是的,这就是它现在的样子。我其实并没有想到使x坐标相等。那不是说如果球从左到右反弹,桨会从左到右移动,而等待球实际击中它? – user1597438 2013-03-06 07:46:47
是的,但它很容易实现=)也许它看起来也不好看。 – 2013-03-06 07:52:16
哇,我已经很长时间以来一直困扰着碰撞,我没有想到做一些简单的事情。非常感谢! :) – user1597438 2013-03-06 07:54:44