Почему я получаю исключение нулевого указателя при попытке использовать поворот (градусы) для моего спрайта?

У меня есть класс GameScreen, в котором есть тачпад. У меня есть метод (setTouchpadY()) в классе GameScreen, который получает сенсорную панель getKnobPercentY.

public float setTouchpadY() {
  return touchpad.getKnobPercentY();

}

В моем классе WorldRenderer метод render() я пытаюсь повернуть спрайт с помощью сенсорной панели. gs — это класс GameScreen.

public void render() {
  //render stuff
  moveCamera(leon.getPosition().x, CAMERA_HEIGHT / 2);
  spriteBatch.setProjectionMatrix(cam.combined);
  spriteBatch.begin();
  drawVillage();
  drawTile();
  drawLeon();
  spriteBatch.end();

            if (leon.isAiming()) {
     leonAimArmSpriteR.rotate(gs.setTouchpadY());         //This line causing crash
  }

}

Я поместил сенсорную панель и кнопки в класс Gamescreen, потому что он реализует экран и процессор ввода. Пока безуспешно пытался поместить их в WorldRenderer. Вот мой logcat/консоль, это от попытки запустить настольную версию, если мне нужно опубликовать андроид, я

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NullPointerException
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)
Caused by: java.lang.NullPointerException
at com.me.RE4.view.WorldRenderer.render(WorldRenderer.java:142)
at com.me.RE4.screens.GameScreen.render(GameScreen.java:151)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:191)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110)

РЕДАКТИРОВАТЬ Итак, я обнаружил, что не создавал экземпляр GameScreen, когда я это делал, он говорил, что WorldController является нулевым. Итак, я создал экземпляр WorldController в WorldRenderer, но затем он говорит, что метод TouchpadY() в GameScreen имеет значение null, устанавливает точку останова, и это дает мне все виды переменных как null.

введите здесь описание изображения


person AspiretoCode    schedule 02.02.2013    source источник
comment
1. Пожалуйста, правильно отформатируйте код. Вы легко это читаете? 2. Опубликуйте трассировку стека logcat для исключения. 3. Если ваш вопрос действительно заключается в том, чтобы использовать вращение спрайта в методе рендеринга без сбоев, ответ - исправить ваши ошибки.   -  person Simon    schedule 03.02.2013
comment
Извините, что выложил с телефона, возможно, теперь это читается.   -  person AspiretoCode    schedule 03.02.2013
comment
Если это строка, вызывающая NPE, проверьте значения leonAimArmSpriteR и gs, так как одно из них должно быть нулевым.   -  person Rod Hyde    schedule 03.02.2013
comment
Извините, я немного нуб. Меня спросили, создал ли я два элемента, о которых вы упомянули, но я не уверен, как это сделать, потому что gs - это класс игрового экрана, я думал, что объявление этого поможет, и я создаю спрайт через spriteBatch в drawLeon () метод.   -  person AspiretoCode    schedule 03.02.2013


Ответы (1)


Хорошо, сначала я пытался выполнить вращение в WorldRenderer, в методе рендеринга, чтобы фиксация сенсорной панели в определенной точке поддерживала вращение на этом уровне. Чтобы это работало, мне пришлось бы создавать/ссылаться на множество элементов в WR, поэтому в итоге я создал игровой экран в WR, а затем сослался на свой спрайт, который я хотел повернуть в GS, а затем значения сенсорной панели работали в методе рендеринга ГС. очень неаккуратно

person AspiretoCode    schedule 04.02.2013