2015-10-24 3 views
2

У меня проблема: Я программирую карточную игру с черепичной карточной коробкой с Box2D, но это значит, что если я нажму, например, для того, чтобы идти вперед с моим персонажем, вектор 2 меня ускоряет и ускоряет поэтому я сделал это:Libgdx box2d Tiled map

if (Gdx.input.isKeyJustPressed(Input.Keys.W) && player.b2body.getLinearVelocity().y == 0) 
      player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getWorldCenter(), true); 
     if (Gdx.input.isKeyPressed(Input.Keys.D)) 
      player.b2body.applyLinearImpulse(new Vector2(0.1f, 0), player.b2body.getWorldCenter(), true); 
     if (Gdx.input.isKeyPressed(Input.Keys.A)) 
      player.b2body.applyLinearImpulse(new Vector2(-0.1f, 0), player.b2body.getWorldCenter(), true); 
if (player.b2body.getLinearVelocity().x > 2) { 
     player.b2body.setLinearVelocity(2, player.b2body.getLinearVelocity().y); 
    } 
    else if (player.b2body.getLinearVelocity().x < -2) { 
     player.b2body.setLinearVelocity(-2, player.b2body.getLinearVelocity().y); 
    } 

Таким образом, у игрока максимальная скорость в два. Но когда он бьет по земле, он медленнее около полутора секунд, потому что он получает пост в воздухе. Как я это исправить?

И мой второй квест: Когда я прыгаю и нажимаю прыжок снова сразу после того, как я ударил по городу, персонаж не прыгает! Почему и как я могу это исправить?

Надеюсь, вы можете мне помочь и благодарить заранее!

+0

Интересно, была ли ваша проблема решена, если да, можете ли вы, пожалуйста, решить свой вопрос, выбрав правильный ответ, спасибо – Netero

ответ

1

Но когда он бьет по земле, он медленнее около полутора секунд , потому что он получает пост в воздухе. Как я это исправить?

Я думаю, что из-за трения, попытайтесь установить трение к нулю в BodyDef при создании тела

Когда я прыгаю и нажмите прыжок снова сразу после того, как я упал на землю в знак не прыгает! Почему и как я могу это исправить?

я предлагаю вам сделать это:

if (Gdx.input.isKeyJustPressed(Input.Keys.W) && isPlayerOnGround) 
     player.b2body.applyLinearImpulse(new Vector2(0, 4f), player.b2body.getPosition(), true); 

используя мир контакт мы обнаружим, если игрок находится на земле

world.setContactListener(new() { 
      @Override 
      public void endContact(Contact c) { 

       Fixture fa = c.getFixtureA(); 
       Fixture fb = c.getFixtureB(); 

       /* end Contact 
       * <<Player>> <---> <<Gound>> 
       */ 
       if(fa.getUserData() !=null && fb.getUserData() !=null && 
          ((fa.getUserData().equals(playerUserData) && fb.getUserData().equals(groundUserData)) || 
          fb.getUserData().equals(playerUserData) && fa.getUserData().equals(groundUserData))) 
       { 
         isPlayerOnGround = false; 
       } 
      } 
      @Override 
      public void beginContact(Contact c) { 

       Fixture fa = c.getFixtureA(); 
       Fixture fb = c.getFixtureB(); 

       /* Begin Contact 
       * * <<Player>> <---> <<Gound>> 
       */ 
       if(fa.getUserData() !=null && fb.getUserData() !=null && 
          ((fa.getUserData().equals(playerUserData) && fb.getUserData().equals(groundUserData)) || 
          fb.getUserData().equals(playerUserData) && fa.getUserData().equals(groundUserData))) 
       { 
         isPlayerOnGround = true; 
       } 
      } 
     }); 

надежда, что было ясно и полезно: =)

+0

Jes это было :) Большое спасибо! – Tobls

0

вот как вы можете добавить userData к телу

... // Define your bodyDef 
Body body = world.createBody(bodyDef); 
... // Define your fixtureDef 
Fixture fixture = body.createFixture(fixtureDef); 
String userData ="MyBody"; 
fixture.setUserData(userData); 

когда вы кладете описание прибора к вашему телу, вы можете получить прибор просто поставить UserData (уникальная строка ех: «mybody») к арматуре

PS: Вы можете поставить то же USERDATA к многие тела (группа тела), если хотите.

+0

ОК, теперь это сработало, но это не делает различия. Вы знаете другой метод? – Tobls

+0

Что вы имеете в виду, это работает, но не имеет значения? вы не могли сделать второй прыжок? вы могли бы объяснить, что копать, а что нет;) – Netero