2016-08-10 8 views
0

私は宇宙船を持つ小惑星を避けるlibgdxゲームに取り組んでいます。私はホワイトのみの画面を参照してください:(ここでuは、IAMがやろうとかを理解するために私のコードの大部分を見ることができる私のプロジェクトを起動すると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); 
    } 
} 

Screenクラス:

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にする必要があります。何の前の画面が存在しない場合はこの方法setScreenは、画面を初期化することができない:

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

[OK]をおかげで、私は画面をタッチするとアプリケーションが閉じていることです。 (任意のアイデア?Eclipseは 'pos.x = Gdx.input.getX() - MyGdxGame.WIDTH/2;でnullポインタの例外を述べています) pos.y = -Gdx.input.getY()+ MyGdxGame.HEIGHT/2;' –

+0

正確には、logcatの出力はありますか?「Entity」はAshley'sですか?「pos」とは何ですか?あなたのコードではどこが初期化されていますか?posの 'al'の' NullPointerException'私は知っている。 –