2015-01-03 2 views
0

У меня есть сцена с физикой, и у меня есть характерный спрайт с физическим телом, тогда у меня есть статический земной спрайт с физическим телом. Все это прекрасно работает, поэтому моим следующим шагом было перемещение моего персонажа. Теперь я предположил, что если бы я только обновил положение персонажей X, персонаж переместился бы и остался бы на земле, но если земля опустится, символ не упадет, она просто плавает, как мне переместить свой персональный спрайт и оставить его на земле во все времена? Код для моей функции обновления нижеcocos2dx Перемещение спрайта с физической сцены

void LevelOne::update(float delta) 
{ 
    if (mJoystick->isActive()) 
    { 
     Vec2 scaledVelocity = mJoystick->getVelocity() * 240; 
     Vec2 updatedPosition = Vec2(mCharacter->getPosition().x + scaledVelocity.x 
            * delta, mCharacter->getPosition().y); 

    mCharacter->setPosition(updatedPosition); 

    if (mJoystick->getVelocity().x < 0) 
    { 
     mCharacter->setFlippedX(false); 
    } 
    else 
    { 
     mCharacter->setFlippedX(true); 
    } 
} 

ответ

0

Следующих шагов может решить вашей проблемно

1) Вы установите Гравитацию как gravity.Set (0.0f, -10.0f), у должно быть в отрицательный.

2) Устанавливает персонаж Sprite динамически.

3) код должен быть в методе обновления.

int32 velocityIterations = 1; 
    int32 positionIterations = 1; 
    world -> Step(dt, velocityIterations, positionIterations); 
    for (b2Body* b = world -> GetBodyList(); b; b = b -> GetNext()) { 
     if (b -> GetUserData() != NULL) { 
      CCSprite *myActor = (CCSprite*) b -> GetUserData(); 
      if(myActor != NULL) { 
       myActor->setPositionY(b -> GetPosition().y * PTM_RATIO); 
       myActor->setRotation(-1 * CC_RADIANS_TO_DEGREES(b -> GetAngle())); 
      } 

     } 
    } 
Смежные вопросы