2017-02-14 5 views
2

Мой счет не увеличивается после того, как я касаюсь мяча. Он увеличивается только тогда, когда я касаюсь мяча и его ближайшего центра экрана. Когда мой мяч только перемещается по оси х, сохраняя постоянную, сенсорный режим работает нормально. Но когда оба увеличиваются, счет увеличивается только при касании в центре.Сенсорный код работает только в центре экрана в моей игре с помощью libgdx

@Override 
public void render() { 


    batch.begin(); 

    Gdx.gl.glClearColor(1,1,1,1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

    batch.draw(ball,xposi,yposi,100,100); 

    if(gameState==1) { 


     if (Gdx.input.justTouched()) { 

      tmp = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0); 
      textureBounds = new Rectangle(xposi, yposi, 100, 100); 

      if (textureBounds.contains(tmp.x, tmp.y)) { 
       Gdx.app.log("Click", "On Ball"); 
       score++; 
       } 
      else { 
       Gdx.app.log("Click", "Not on Ball"); 
       } 
      } 



     font.draw(batch, String.valueOf(score), 100, 300); 
     font.draw(batch, String.valueOf(lives), 200, 300); 

     xposi+=velocity; 
     yposi+=velocity; 

     if (xposi >= xmax - 100) { 

      velocity = -velocity; 
     } else if (xposi <= xmin) { 

      velocity = -velocity; 
     } 

     if (yposi >= ymax - 100) { 

      velocity = -velocity; 
     } else if (yposi <= ymin) { 

      velocity = -velocity; 
     } 

     batch.end(); 
    } 
} 

ответ

3

В libgdx, когда мы что-то нарисовать на экране, то экран происхождение левый нижний угол, но когда мы обнаруживаем сенсорный экран, то происхождение левый верхний угол.

Когда вы имеете дело с горизонтальным движением, тогда нет взаимодействия с координатой y, чтобы она работала нормально. Вы обнаруживаете касание мяча, когда ваш мяч находится в центре, тогда значение Gdx.input.getY() примерно такое же, как и у Gdx.graphics.getHeight()-Gdx.input.getY(), поэтому иногда работает.

так простое решение - это просто преобразование координат начала координат в нижний левый угол.

tmp = new Vector3(Gdx.input.getX(),Gdx.graphics.getHeight()-Gdx.input.getY(), 0); 

Рекомендация:

Не создавать объект в метод отрисовки, как вы создаете объект Rectangle и Vector3, создать объект в show() или create() способом и установить значение этих переменных в методе render() ,

+0

Вы можете просто использовать 'camera.unproject()', как указано в [docs] (https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/Camera.html) –

+0

@ LeonZ. Я думаю, что владелец этого вопроса не использует какую-либо камеру. – Aryan

+1

Большое вам спасибо. Проблема решена !!! – Shubhankar

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

  • Нет связанных вопросов^_^