Я начал пытаться создать TestGame. В настоящее время есть NPE и после того, как трачу часы на Google и пытаюсь все, о чем я мог думать, я не могу понять, что я забываю или забываю. У меня было все в одном классе, и все отлично работало. Хотя я хотел создать графический интерфейс, где я мог переключаться между MainMenu и PlayScreen. Мой класс MainMenu работает отлично, хотя, когда я ударил аккуратную кнопку «играть», чтобы войти в класс экране воспроизведения я получаю эти ошибки:Libgdx Screen NullPointerException при переключении экранов
Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.me.game.PlayScreen.render(PlayScreen.java:90)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.me.game.TestGame.render(TestGame.java:27)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:214)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
экране воспроизведения ошибки:
batch.draw(player.getCurrentFrame(), player.getPosition().x , player.getPosition().y);
ошибка игры:
if (screen != null) screen.render(Gdx.graphics.getDeltaTime());
ошибка TestGame:
super.render();
TestMenu класс (класс Game)
public class TestGame extends Game {
Game game;
@Override
public void create() {
game = this;
setScreen(new MainMenu(game));
public void render() {
super.render();
}
MainMenu класс
public class MainMenu implements Screen{
SpriteBatch batch;
Game game;
Stage stage;
public MainMenu(Game game){
this.game = game;
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act();
batch.begin();
stage.draw();
batch.end();
}
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
game.setScreen(new PlayScreen(game));
stage.clear();
return true;
экране воспроизведения
public class PlayScreen implements Screen {
SpriteBatch batch;
Player player;
Game game;
Texture playerTexture;
public PlayScreen(Game game){
this.game = game;
}
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.draw(player.getCurrentFrame(), player.getPosition().x , player.getPosition().y);
}
player.update();
batch.end();
}
public void show() {
batch = new SpriteBatch();
класс игрока
public class Player {
Texture playerTexture ;
Vector2 position;
String textureLoc;
public Player(Vector2 position, String textureLoc){
this.position = position;
movement = "";
playerTexture = new Texture(Gdx.files.internal("Character.png"));
public String getTextureLoc() {
return textureLoc;
}
public void setTextureLoc(String textureLoc) {
this.textureLoc = textureLoc;
}
Самым полезным было Libgdx Screen NullPointerException when referencing another class, где эта проблема также, кажется, что я не инициализировать игрока в классе PlayerScreen в методе шоу. Хотя когда я заполняю player = new Player (position, textureLoc); в рамках шоу метода
public void show() {
batch = new SpriteBatch();
player = new Player(position, textureLoc);
получить другие ошибки
at com.me.game.Player.<init>(Player.java:50)
at com.me.game.PlayScreen.show(PlayScreen.java:90)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at com.me.game.MainMenu$1.touchDown(MainMenu.java:90)
Какой пункт:
bounds = new Rectangle(position.x, position.y, currentFrame.getRegionWidth(), currentFrame.getRegionHeight());
player = new Player(position, textureLoc);
game.setScreen(new PlayScreen(game));
Хотя я предполагаю, что это имеет какое-то отношение к игроку не инициализируется правильно? Во всяком случае по какой-то причине я просто не могу решить эту проблему. Любые идеи очень приветствуются.
Я знал, что это что-то простое, не верю, что я этого не осознавал. Ты мой герой дня! Спасибо за ваш ясный и быстрый ответ, если бы у меня был необходимый представитель, я бы проголосовал за ваш ответ! :). Вы не представляете, как вы меня просто счастливы. –