0

box2dを使ってゲームのようなピンポンを作ろうとしています。上記のゲームのように、ボールと2つのパドルがあります。パドルの1つは、加速度計を使用してプレーヤーによって動かされます。私はこれがうまく機能しています。一方、2番目のパドルは、ボールをキャッチしてプレーヤーに打ち返すような壁のように機能させたいと思います。

私の問題は、ボールが重力と力を使ってバウンドしていることです。そのため、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に指示する方法がわかりません。誰かが私にこれをどのように実装できるかについてのアイデアを教えてもらえますか?前もって感謝します。

4

1 に答える 1

2

パドルのx座標とボールのx座標を同じに保とうとすることはできませんか?たとえば、ボールが左に行くと、パドルも左になります。それとも私は質問を完全に理解していませんか?あなたのゲームはこんな感じだと思います

******************
*  ***           *
*                *
*      *         *
*                *
*           ***  *
******************
于 2013-03-06T07:40:20.140 に答える