0
메신저 우주선과 소행성을 피하는 libgdx 게임을하고 있습니다. 난 내 프로젝트를 시작하면 내가에만 흰색 화면 참조 :(여기서 u는 스피 할 노력하고 이해하는 내 코드의 큰 부분을 볼 수 있습니다Libgdx/Android에서 스프라이트를 그리는 방법?
메인 클래스 :.
package com.me.mygdxgame;
import screen.MenuScreen;
import screen.ScreenManager;
public class MyGdxGame implements ApplicationListener {
SpriteBatch batch;
public static int WIDTH = 800 , HEIGHT = 480; // resolution
@Override
public void create() {
batch = new SpriteBatch();
ScreenManager.setScreen(new MenuScreen());
}
@Override
public void dispose() {
if(ScreenManager.getCurrentScreen() != null){
ScreenManager.getCurrentScreen().dispose();
}
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
if(ScreenManager.getCurrentScreen() != null){
ScreenManager.getCurrentScreen().update();
}
if(ScreenManager.getCurrentScreen() != null){
ScreenManager.getCurrentScreen().render(batch);
}
}
화면 클래스 :
package screen;
public abstract class Screen {
public abstract void create();
public abstract void render(SpriteBatch batch);
public abstract void update();
public abstract void resize(int width, int height);
public abstract void dispose(int width, int height);
public abstract void dispose();
public abstract void pause();
public abstract void resume();
}
을 ScreenManager :
public class ScreenManager {
private static Screen currentScreen;
public static void setScreen(Screen screen){
if(currentScreen != null){
currentScreen.dispose();
currentScreen = screen;
currentScreen.create();
}
}
public static Screen getCurrentScreen() {
return currentScreen;
}
}
MenuScreen :
public class MenuScreen extends Screen {
private OrthoCamera cam;
private Spaceship spaceship;
@Override
public void create() {
// TODO Auto-generated method stub
cam = new OrthoCamera();
spaceship = new Spaceship();
}
@Override
public void render(SpriteBatch batch) {
// TODO Auto-generated method stub
batch.setProjectionMatrix(cam.combined);
batch.begin();
spaceship.render(batch);
batch.end();
}
@Override
public void update() {
// TODO Auto-generated method stub
cam.update();
spaceship.update();
}
우주선 클래스 :
public class Spaceship extends Entity {
Texture texture;
Sprite sprite;
public Spaceship() {
texture = new Texture("spritesheet.png");
texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
TextureRegion region = new TextureRegion(texture, 0, 312, 258, 144);
sprite = new Sprite(region);
sprite.setSize(sprite.getWidth(), sprite.getHeight());
sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);
sprite.setPosition(-sprite.getWidth()/2, -sprite.getHeight()/2);
}
public void update() {
if (Gdx.input.isTouched()) {
pos.x = Gdx.input.getX() - MyGdxGame.WIDTH/2;
pos.y = -Gdx.input.getY() + MyGdxGame.HEIGHT/2;
}
}
@Override
public void render(SpriteBatch batch) {
sprite.draw(batch);
}
확인 감사에는 이전 화면이없는 경우이 방법
setScreen
는 화면을 초기화 할 수없는 것입니다 : (어떤 생각?'pos.x = Gdx.input.getX() - MyGdxGame.WIDTH/2; pos.y = -Gdx.input.getY() + MyGdxGame.HEIGHT/2;에서 null 포인터 예외가 발생합니다. –정확하지는 않지만 logcat 출력이 있습니까? 'Entity'는 Ashley의 것입니까?'pos '는 무엇입니까? 코드에서 초기화되는 위치는 무엇입니까?'pos '에 대한'NullPointerException '이 될 수 있습니까? 나는 알아. –