2016-05-17 2 views
0

Моя игра представляет собой платформер, и экран следует за игроком, который постоянно перемещается прямо через задний план. Каждую секунду игра замедляет движение вправо, а затем снова ускоряется. Как бы я прекратил это? Я уже прошел дельта-время в свой мир. Но они не помогли отстать или заикаться. БлагодаряИгра Libgdx ускоряется и замедляется каждую секунду

MAIN ТОНИРОВАТЬ LOOP

public void update(float dt){ 
     world.step(1/60f, 2, 2); 

     handleInput(dt); 

     camX(); 

     player.moveMario(); 

     hud.update(); 

     gameCam.update(); 
     renderer.setView(gameCam); 
    } 

    @Override 
    public void render(float delta) { 
     update(delta); 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     renderer.render(); 

     game.batch.setProjectionMatrix(hud.stage.getCamera().combined); 
     hud.stage.draw(); 

     game.batch.setProjectionMatrix(gameCam.combined); 
     game.batch.begin(); 
     game.batch.draw(ball, player.b2Body.getPosition().x - MarioBros.RADIUS_CHARACTER/MarioBros.PPM, player.b2Body.getPosition().y - MarioBros.RADIUS_CHARACTER/MarioBros.PPM, 70/MarioBros.PPM, 70/MarioBros.PPM); 
     mapCreator.createSpikeBalls(map, animation, game.batch); 
     endOfGame(); 
     game.batch.end(); 

     b2dr.render(world, gameCam.combined); 
    } 

    public void camX(){ 
      gameCam.position.x = gamePort.getWorldWidth()/2; 
      if(player.b2Body.getPosition().x >= gamePort.getWorldWidth()/2){ 
       gameCam.position.x = player.b2Body.getPosition().x; 
      } 
    } 

MOVE персонажу ПРАВА

public void moveMario(){ 
     if (b2Body.getLinearVelocity().x < 4){ 
      b2Body.applyLinearImpulse(new Vector2(2.7f, 0), b2Body.getWorldCenter(), true); 
     } 
    } 
+0

шаг Я не уверен, что именно ваш 'ш orld.step() ', но это похоже на функцию, для которой, вероятно, потребуется время дельта – rbennett485

ответ

1

Вы ничего о вашем мире и тела настройки не писать, но я думаю, что следующие:

  • Вы применяете импульс марио => его скорость увеличивается
  • В следующих нескольких мировых шагов, трение тела замедляется марио вниз
  • Как только b2Body.getLinearVelocity().x < 4 правда, вы снова применить импульс марио
  • Трение замедляет его снова
  • ...

Кроме того, вы должны обязательно пройти DeltaTime в мире методом