Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自动移动一个精灵以捕捉另一个精灵_C++_Cocos2d Iphone_Box2d - Fatal编程技术网

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

C++ 自动移动一个精灵以捕捉另一个精灵,c++,cocos2d-iphone,box2d,C++,Cocos2d Iphone,Box2d,我正在尝试使用box2d制作一个类似乒乓球的游戏。就像刚才说的,有一个球和两个桨。玩家使用加速计移动其中一个挡板。我的这个很好用。另一方面,我希望第二个球拍的动作就像一堵墙,可以接住球并将球击回给球员 我的问题是球在重力和力的作用下反弹,所以我不知道如何告诉第二个桨移动到球要去的地方去接球。目前,我的代码如下所示: - (void)update:(ccTime) dt { if(_isPaused == FALSE) { _world->Step(dt, 10, 10);

我正在尝试使用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);
}}
-(无效)更新:(ccTime)dt{
如果(_isPaused==FALSE)
{
_世界->步骤(dt,10,10);
对于(b2Body*b=_world->GetBodyList();b;b=b->GetNext()){
如果(b->GetUserData()!=NULL){
CCSprite*sprite=(CCSprite*)b->GetUserData();
if(sprite.tag==3)
{
[自调度:@selector(moveObj:)间隔:0.0];
b2Vec2 autoPos=b2Vec2(sprite.position.x/PTM_比率,sprite.position.y/PTM_比率);
float32 autoAngle=-1*CC_度到_弧度(精灵旋转);
b->SetTransform(自动转换、自动角度);
}
}
}
std::vector::iterator pos;
对于(pos=_contactListener->_contacts.begin();pos!=_contactListener->_contacts.end();++pos)
{
MyContact contact=*位置;
如果((contact.fixtureA==\u tPaddleFixture&&contact.fixtureB==\u ballFixture)| |(contact.fixtureA==\u ballFixture&&contact.fixtureB==\u tPaddleFixture))
{
_isHit=真;
}
}
}}
-(void)moveObj:(ccTime)dt{
如果(_isHit==TRUE)
{
//我需要这里的密码
NSLog(@“命中”);
}
其他的
{
tPaddle.position=ccp(160,tPaddle.position.y);
}}

目前,我正在打印一条消息,上面写着如果球拍和球发生碰撞(仅在中间)就击中,但我不知道如何告诉tPaddle将球移动到任何地方,以便接住它。谁能给我一个想法,我如何才能实现这一点?提前谢谢。

你能不能试着保持球拍的
x
坐标和球的
x
坐标相等?例如,如果球向左移动,桨叶也会向左移动。还是我完全不明白这个问题?我想象你的比赛是这样的

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

是的,这就是目前的情况。实际上我还没想过要使x坐标相等。这难道不意味着如果球从左到右弹跳,反之亦然,在等待球真正击中它时,球拍会从左到右移动吗?是的,但实现起来很简单=),也许看起来也不会很糟糕。哇,很长一段时间以来,我一直被碰撞所困扰,没有想到要做这么简单的事情。非常感谢!:)