-1
좋아, 그래서 3 스크린 MyGame 화면, GameScreen 화면 및 MainMenuScreen 있습니다. 나는 스크린을 터치 할 때 메인 렌더 스크린으로 간다. 내가 만지면 아무 일도 일어나지 않아 대신 스페이스 바를 사용하여 창문에서 연주했습니다. 이 MyGame이 있습니다 :NullPointerException LibGDX 안드로이드
package com.faturbansloth.mygdxgame;
import com.badlogic.gdx.Game;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class MyGame extends Game {
public BitmapFont font;
public SpriteBatch batch;
public void create(){
batch = new SpriteBatch();
font = new BitmapFont();
this.setScreen(new MainMenuScreen(this));
}
public void render(){
super.render();
}
public void dispose(){
font.dispose();
batch.dispose();
}
}
그리고 이것은 오류가 다음 MainMenuScreen
package com.faturbansloth.mygdxgame;
import java.util.Iterator;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.Input.Peripheral;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.TimeUtils;
public class GameScreen implements Screen {
final MyGame game;
OrthographicCamera camera;
Vector3 touch;
boolean paused;
Rectangle ship;
boolean available;
Array<Rectangle> asteroids;
long lastDropTime;
public GameScreen(final MyGame gam) {
this.game = gam;
camera = new OrthographicCamera();
camera.setToOrtho(true,1080,1920);
touch = new Vector3();
available = Gdx.input.isPeripheralAvailable(Peripheral.Accelerometer);
ship = new Rectangle();
ship.x = 1080/2 - 128/2;
ship.y = 1600;
ship.width = 128;
ship.height = 128;
asteroids = new Array<Rectangle>();
spawnAsteroi();
}
private void spawnAsteroi(){
Rectangle asteroi = new Rectangle();
asteroi.x = MathUtils.random(0, 1080 - 100);
asteroi.y = 0;
asteroi.height = 100;
asteroi.width = 100;
asteroids.add(asteroi);
lastDropTime = TimeUtils.nanoTime();
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(0F, 0F, 0F, 1F);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
game.batch.setProjectionMatrix(camera.combined);
game.batch.begin();
for(Rectangle asteroi: asteroids){
game.batch.draw(Assets.texture_asteroi, asteroi.x, asteroi.y);
}
Assets.font.draw(game.batch, "Asteroids!", 366, 1100);
game.batch.draw(Assets.ship, ship.x, ship.y);
if(paused){
game.batch.draw(Assets.pause, 0, 0);
}
game.batch.end();
if(paused){
if(Gdx.input.isTouched()){
paused = false;
try {
Thread.sleep(100);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}else{
generalUpdate();
}
if(ship.x < 0) ship.x = 0;
if(ship.x > 1080 - 128) ship.x = 1080 - 128;
if(TimeUtils.nanoTime() - lastDropTime > 1000000000) spawnAsteroi();
Iterator<Rectangle> iter = asteroids.iterator();
while(iter.hasNext()){
Rectangle asteroi = iter.next();
asteroi.y +=200 * Gdx.graphics.getDeltaTime();
if(asteroi.y + 100 < 0) iter.remove();
if(asteroi.overlaps(ship)){
iter.remove();
}
}
}
@Override
public void dispose() {
game.batch.dispose();
Assets.texture_asteroi.dispose();
}
public void generalUpdate(){
ship.x -= Gdx.input.getAccelerometerX();
if(Gdx.input.isKeyPressed(Keys.SPACE) || (Gdx.input.isTouched())){
paused = true;
try {
Thread.sleep(100);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
}
@Override
public void hide() {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
그리고 여기에 있습니다 : : 여기
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.badlogic.gdx.graphics.g2d.SpriteBatch.draw(SpriteBatch.java:631)
at com.faturbansloth.mygdxgame.GameScreen.render(GameScreen.java:90)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.faturbansloth.mygdxgame.MyGame.render(MyGame.java:21)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:187)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110)
편집 죄송합니다 사람이 looonnnggg의 GameScreen입니다
package com.faturbansloth.mygdxgame;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.freetype.FreeTypeFontGenerator;
public class MainMenuScreen implements Screen {
final MyGame game;
OrthographicCamera camera;
public MainMenuScreen(final MyGame gam) {
game = gam;
camera = new OrthographicCamera();
camera.setToOrtho(false, 1080, 1920);
}
public void render(float delta){
Gdx.gl.glClearColor(0, 0, 0.2f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
camera.update();
game.batch.setProjectionMatrix(camera.combined);
game.batch.begin();
FreeTypeFontGenerator gen = new FreeTypeFontGenerator(Gdx.files.internal("font1.otf"));
game.font = gen.generateFont(100);
game.font.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
game.font.setColor(Color.valueOf("7a7d7d"));
game.font.draw(game.batch, "Welcome to Asteroids!", 184, 800);
game.font.draw(game.batch, "Tap anywhere to begin.", 184, 500);
game.batch.end();
if(Gdx.input.isTouched() || Gdx.input.isKeyPressed(Keys.SPACE)){
game.setScreen(new GameScreen(game));
dispose1();
}
}
private void dispose1() {
// TODO Auto-generated method stub
}
@Override
public void resize(int width, int height) {
// TODO Auto-generated method stub
}
@Override
public void show() {
// TODO Auto-generated method stub
}
@Override
public void hide() {
// TODO Auto-generated method stub
}
@Override
public void pause() {
// TODO Auto-generated method stub
}
@Override
public void resume() {
// TODO Auto-generated method stub
}
@Override
public void dispose() {
// TODO Auto-generated method stub
}
}
오류가 있습니다 : 게임의
Super.render() for MyGame
game.batch.draw(Assets.texture_asteroi, asteroi.x, asteroi.y
# 113은 어느 라인입니까? – csmckelvey
지난 'MainMenuScreen' – suitianshi
사람들이 코드를 게시하도록 요청할 때 _relevant_ 코드 만 의미한다는 점에 유의하십시오. 예를 들어, GameScreen 클래스에는 몇 가지 비어있는 메소드가 있습니다. 우리는 그들을 볼 필요가 없습니다 (왜냐하면 그들은 절대적으로 아무것도하지 않기 때문입니다). – csmckelvey