XML按钮和OpenGL Android,错误“在空对象引用上”

时间:2017-07-20 07:09:32

标签: xml opengl-es onclicklistener

我的OpenGl项目中的点击按钮有问题。我尝试用按钮更改Z值,但每次都是ERROR。

日志

    FATAL EXCEPTION: main
Process: com.example.vladimir.myapplication, PID: 26366
java.lang.NullPointerException: Attempt to read from field 'float com.example.vladimir.myapplication.MyGLRenderer.z' on a null object reference
at com.example.vladimir.myapplication.MyGLActivity$1.onClick(MyGLActivity.java:64)

我不知道,我做错了什么。

这是我的代码按钮和MainActivity

private MyGLRenderer  myGLRenderer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_gl);
        glView = (MyGLSurfaceView) findViewById(R.id.glSurfaceViewID);

                          /*ОБРАБОТКА НАЖАТИЙ НА КНОПКИ*/

        Button ZoomIn = findViewById(R.id.ZoomIn);
        Button ZoomOut = findViewById(R.id.ZoomOut);
        ZoomOut.setOnClickListener(ZoomOutListener);
        ZoomIn.setOnClickListener(ZoomInListener);
    }
    //Функция-Обработчик нажатия на кнопки



    View.OnClickListener ZoomInListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            myGLRenderer.z +=1;
            Log.e("ZoomIn", "ZoomIn");
        }
    };

这个,MyGLRENDERER,我尝试更改Z值

public class MyGLRenderer implements  GLSurfaceView.Renderer {
    private Context context;
    private TextureCube cube;
    private TextureRoad road;
    private TextureTree tree;
    private TextureSome some;
    float angleX = 0;   // по Х Влево вправо
    float angleY = 0;   // по У
    public float z = -50; // ZOOM
    float spinRotate;
    private float zoomIn;
    private float zoomOut;




    public void GLZoomControls () {
        Log.e("ONO", "ONO JIVOE");
        z +=1;
    }

    public class Zoom {
        MyGLRenderer renderer;
        private float zoomIn;
        private float zoomOut;
        int ZoomFlag;
        public void GLZoomControls () {
            Log.e("ONNNO", "ONO JIVOE");
            z +=1;
        }
    }

    //Конструктор для построения
    public MyGLRenderer(Context context) {
        this.context = context;
        cube = new TextureCube(); // текстуры куба
        road = new TextureRoad(); // текстуры дороги
        tree = new TextureTree(); // текстуры дерева
        some = new TextureSome();
    }

    @Override
    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
        gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Цвет черный
        gl.glClearDepthf(1.0f);            // Глубина цвета
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glDepthFunc(GL10.GL_LEQUAL);
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);  //
        gl.glShadeModel(GL10.GL_SMOOTH);
        gl.glDisable(GL10.GL_DITHER);

        cube.loadTexture(gl, context);    // Загрузка текстуры куба
        road.loadTextureRoad(gl, context); // Загрузка текстуры дороги
        tree.loadTextureTree(gl, context); // загрузка текстуры дерева
        some.loadTextureSome(gl,context);
        gl.glEnable(GL10.GL_TEXTURE_2D);  // Наложение текстуры
    }

    @Override
    public void onSurfaceChanged(GL10 gl, int width, int height) {
        if (height == 0) height = 1;
        float aspect = (float)width / height;

        //просмотр
        gl.glViewport(0, 0, width, height);

        // Перспектива
        gl.glMatrixMode(GL10.GL_PROJECTION); // выбор матрицы
        gl.glLoadIdentity();                 // обновление матрицы

        GLU.gluPerspective(gl, 45, aspect, 0.1f,  150000.0f);
        gl.glPushMatrix();
        gl.glMatrixMode(GL10.GL_MODELVIEW);  // Выбираем модель просмотра матрицы
        gl.glLoadIdentity();                 // обновление положение
    }

    @Override
    public void onDrawFrame(GL10 gl) {
        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

        // ----- Рендеринг ----- //
        gl.glLoadIdentity(); // обновляем положение

        //проверка пола
        if (z == -16) {
            //Движение сцены
            z = -18;
        }

        gl.glTranslatef(angleY/16,-angleX/16, 0); //перемещает Z X Y

        GLU.gluLookAt(gl, 3, -z / 2, 0, 0, 0, 0, 0, 1, 0); //посмотрим что выйдет :D

        gl.glRotatef(spinRotate,0,1,0);
        //ОПТИМИЗИРОВАТЬ РИСОВКА ТОЛЬКО ПОСЛЕ ИЗМЕНЕНИЯ ЗУМА или ПОСЛЕ ТАЧА
        //проверка на флаг



            cube.draw(gl); // Рисуем куб
            road.drawRoad(gl); // Рисуем дорогу
            tree.drawTree(gl); // Рисуем дерево
            some.drawSome(gl);
    }
}

请帮助我,我不知道我做错了什么; [

1 个答案:

答案 0 :(得分:0)

您尚未在任何地方初始化<div class="form-group"> @Html.TextBoxFor(model => model.CustomerID, new {style = 'display:none'}) @Html.LabelFor(model => model.CustomerGUID, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.CustomerGUID, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.CustomerGUID, "", new { @class = "text-danger" }) </div> </div>

使用myGLRenderer时,您只是创建一个private MyGLRenderer myGLRenderer;对象引用。您应该通过调用构造函数来初始化它。