2013-07-18 5 views
0

Так что я только начинаю с 3D-части LIBGDX. Я загрузил последнюю ночную сборку, и когда я последовал за учебником, я получил исключение 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(); 
Смежные вопросы