自动移动精灵以捕捉另一个精灵

时间:2013-03-06 06:56:24

标签: c++ cocos2d-iphone box2d

我正在尝试使用box2d制作像乒乓球一样的乒乓球。像所说的游戏一样,有一个球和2个桨。其中一个拨片由玩家使用加速度计移动。我有这个工作正常。另一方面,我希望第二个球拍像某种能够接住球并将其击回球员的墙壁。

我的问题是球在重力和力的作用下反弹,所以我不知道如何判断第二个球是否会移动到球的前方。目前,我的代码如下所示:

- (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在球到达的任何地方移动,抓住它。有人可以告诉我如何实现这一点吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

你不能试着保持球拍的x坐标和球的x坐标相等吗?例如,如果球向左移动,那么桨将会离开。或者我完全不理解这个问题?我想你的游戏看起来像这样

******************
*  ***           *
*                *
*      *         *
*                *
*           ***  *
******************