2013-07-18 52 views
0

所以我刚开始使用LIBGDX的3D部分。我下载了最新的每晚构建,当我跟着教程时,我得到了一行nullPointerException(这将在代码中标记)。在线上有一个nullPointer是这个代码LIBGDX 3D不能正常工作

modelBatch.render(instance); 

这行的所有值都在那里。该实例具有它的所有属性,并且在我的代码中有其他所有内容。任何想法,为什么我得到一个nullPointerException?提前致谢。

import com.badlogic.gdx.ApplicationListener; 
import com.badlogic.gdx.Gdx; 
import com.badlogic.gdx.graphics.Color; 
import com.badlogic.gdx.graphics.GL10; 
import com.badlogic.gdx.graphics.PerspectiveCamera; 
import com.badlogic.gdx.graphics.VertexAttributes.Usage; 
import com.badlogic.gdx.graphics.g3d.Model; 
import com.badlogic.gdx.graphics.g3d.ModelBatch; 
import com.badlogic.gdx.graphics.g3d.ModelInstance; 
import com.badlogic.gdx.graphics.g3d.materials.ColorAttribute; 
import com.badlogic.gdx.graphics.g3d.materials.Material; 
import com.badlogic.gdx.graphics.g3d.utils.ModelBuilder; 


public class threeDTest implements ApplicationListener { 
public PerspectiveCamera camera; 
public ModelBatch modelBatch; 
public Model model; 
public ModelInstance instance; 

    @Override 
    public void create() { 
     camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); 
     camera.position.set(10f, 10f, 10f); 
     camera.lookAt(0, 0, 0); 
     camera.near = 0.1f; 
     camera.far = 300f; 
     camera.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); 
    } 

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

    } 

    @Override 
    public void render() { 
     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(camera);//Begin Rendering 
     modelBatch.render(instance);<--Null Pointer on this line 
     modelBatch.end();//End Rendering 
    } 

@Override 
public void pause() { 

} 

@Override 
    public void resume() { 

    } 

    @Override 
    public void dispose() { 
     model.dispose(); 
    } 

}

回答

3

看着你的代码,你从来没有构建(及处置)的modelBatch实例。因此modelBatch将为null,从而导致您获得NPE。

添加下面一行在你创建方法:

modelBatch = new ModelBatch(); 

和下面一行在您的Dispose方法:

modelBatch.dispose();