2016-08-10 2 views
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); 
} 

답변

0

문제는 ScreenManager에 있어야합니다.

public static void setScreen(Screen screen){ 
    if(currentScreen != null){ 
     currentScreen.dispose(); 
     currentScreen = screen; 
     currentScreen.create(); 
    } 
} 

가되어야한다 : 다음 문제는 내가 화면을 터치하면 앱이 종료 있다는 것입니다 :)

public static void setScreen(Screen screen) { 
    if (currentScreen != null){ 
     currentScreen.dispose(); 
    } 
    currentScreen = screen; 
    currentScreen.create(); 
} 
+0

확인 감사에는 이전 화면이없는 경우이 방법 setScreen는 화면을 초기화 할 수없는 것입니다 : (어떤 생각?'pos.x = Gdx.input.getX() - MyGdxGame.WIDTH/2; pos.y = -Gdx.input.getY() + MyGdxGame.HEIGHT/2;에서 null 포인터 예외가 발생합니다. –

+0

정확하지는 않지만 logcat 출력이 있습니까? 'Entity'는 Ashley의 것입니까?'pos '는 무엇입니까? 코드에서 초기화되는 위치는 무엇입니까?'pos '에 대한'NullPointerException '이 될 수 있습니까? 나는 알아. –

관련 문제