2013-06-02 41 views
1

我一直在39行,這是 modelBatch.begin(cam);NullPointerException?不知道爲什麼。 LIBGDX

我不知道,爲什麼它這樣得到一個NullPointerException。如果你注意到了,請告訴我。我一整天都在努力解決這個問題。我對android開發很陌生,很容易犯下愚蠢的錯誤。感謝您的幫助。

public class Loading implements Screen { 

private boolean AP; 
private Chemistry chemistry; 
public PerspectiveCamera cam; 
public ModelBatch modelBatch; 
public Model model; 
public ModelInstance instance; 
public Lights lights; 

public Loading(boolean AP, Chemistry chemistry) { 
    this.AP = AP; 
    this.chemistry = chemistry; 
} 

@Override 
public void render(float delta) { 
    Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), 
      Gdx.graphics.getHeight()); 
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    modelBatch.begin(cam); 
    modelBatch.render(instance, lights); 
    modelBatch.end(); 
} 

@Override 
public void resize(int width, int height) { 
} 

@Override 
public void show() { 
      modelBatch = new ModelBatch(); 
    lights = new Lights(); 
    lights.ambientLight.set(0.4f, 0.4f, 0.4f, 1f); 
    lights.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, 
      -0.2f)); 

    cam = new PerspectiveCamera(70, Gdx.graphics.getWidth(), 
      Gdx.graphics.getHeight()); 
    cam.position.set(10f, 10f, 10f); 
    cam.lookAt(0, 0, 0); 
    cam.near = 0.1f; 
    cam.far = 300f; 
    cam.update(); 

    ModelBuilder modelBuilder = new ModelBuilder(); 
    model = modelBuilder.createBox(5f, 5f, 5f, 
      new Material(ColorAttribute.createDiffuse(Color.GREEN)), 
      Usage.Position | Usage.Normal); 

    instance = new ModelInstance(model); 

} 
     ... 
} 
+1

你有沒有實例化'PerspectiveCamera cam'? –

+0

你是什麼意思。我有凸輪=新的PerspectiveCamera(70,Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 我正在關注GitHub上的測試示例。 –

+1

是的,我明白了。但是首先調用哪種方法? 'render(float delta)'或'show()'? –

回答

2

移動這對你的構造:

 modelBatch = new ModelBatch(); 
lights = new Lights(); 
lights.ambientLight.set(0.4f, 0.4f, 0.4f, 1f); 
lights.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, 
     -0.2f)); 

cam = new PerspectiveCamera(70, Gdx.graphics.getWidth(), 
     Gdx.graphics.getHeight()); 
cam.position.set(10f, 10f, 10f); 
cam.lookAt(0, 0, 0); 
cam.near = 0.1f; 
cam.far = 300f; 
cam.update(); 

ModelBuilder modelBuilder = new ModelBuilder(); 
model = modelBuilder.createBox(5f, 5f, 5f, 
     new Material(ColorAttribute.createDiffuse(Color.GREEN)), 
     Usage.Position | Usage.Normal); 

instance = new ModelInstance(model); 

,如:

public Loading(boolean AP, Chemistry chemistry) { 
    this.AP = AP; 
    this.chemistry = chemistry; 
    //here 
} 
+0

WOW。這樣可行。我應該離開show()方法爲空嗎? –

+0

如果您在'dispose()'方法中處理任何資源時不要重複使用相同的加載屏幕,因爲在顯示屏幕時不再創建它們。 – DannyMo

+0

是的,通常你不使用show方法。 加載 - > MainMenu - >遊戲。當時只有一個實例,如果你想繼續加載屏幕實例,而不是每個「簡歷」都製作另一個實例,只需將其保存在一個字段中即可。 – Lestat

相關問題