2013-03-06 93 views
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可以移動到任何地方,抓住它。有人可以給我一個想法,我怎麼能實現這一點?提前致謝。

回答

2

不能只是試圖保持槳的x座標和球的x座標相等嗎?舉例來說,如果球離開,槳也會如此。或者我完全不理解這個問題?我想你的遊戲看起來像這樣

****************** 
* ***   * 
*    * 
*  *   * 
*    * 
*   *** * 
****************** 
+0

是的,這就是它現在的樣子。我其實並沒有想到使x座標相等。那不是說如果球從左到右反彈,槳會從左到右移動,而等待球實際擊中它? – user1597438 2013-03-06 07:46:47

+0

是的,但它很容易實現=)也許它看起來也不好看。 – 2013-03-06 07:52:16

+0

哇,我已經很長時間以來一直困擾着碰撞,我沒有想到做一些簡單的事情。非常感謝! :) – user1597438 2013-03-06 07:54:44

相關問題