Повторно перемещайте тело box2d аналогично перемещению CCSprites с помощью CCRepeatForever. - PullRequest
0 голосов
/ 08 сентября 2011

У меня проблема с моим текущим проектом.

Я бы хотел, чтобы b2Body несколько раз двигался вверх и вниз. Я уже знаю, как сделать это с CCSprite:

[paddle runAction:[CCRepeatForever actionWithAction: [CCSequence actions: [CCMoveTo actionWithDuration:1.0 position:ccp([paddle position].x,[paddle position].y+40)], [CCMoveTo actionWithDuration:1.0 position:ccp([paddle position].x,[paddle position].y)], nil ]]];

Кто-нибудь может мне помочь сделать то же самое с b2Body? Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 09 сентября 2011

я понял, чувак,
в почти объяснении, каждое движение CCsprite зависит от движения b2body - это движение размещается по методу 'tick' -
в моем случае, я переворачиваю этот путь, я двигаюсьb2body согласно методу CCsprite по тиковому методу, поэтому я даю следующий код по тиковому методу:

for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) {    
    if (b->GetUserData() != NULL) {
        CCSprite *sprite = (CCSprite *)b->GetUserData();
        if (sprite.tag == 4 || sprite.tag == 5) {
            b2Vec2 b2Position = b2Vec2(sprite.position.x/PTM_RATIO,
                                       sprite.position.y/PTM_RATIO);
            float32 b2Angle = -1 * CC_DEGREES_TO_RADIANS(sprite.rotation);

            b->SetTransform(b2Position, b2Angle);
        }

    }        
}
0 голосов
/ 09 сентября 2011

Вам придется реализовать последовательность самостоятельно, которая включает в себя:

  • отслеживание текущей целевой позиции
  • из текущей позиции тела, определение того, достигло ли оноцель
  • если она есть, измените целевую позицию
  • примените силу, импульс или установите скорость, необходимую для перемещения тела

Возможно, вы сможете расширитьCCMoveTo, чтобы сделать свой собственный класс, чтобы сделать это ... Я бы сначала посмотрел на это.

...