Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';不能使用加速度计坐标_Java_Android_Accelerometer - Fatal编程技术网

Java Can';不能使用加速度计坐标

Java Can';不能使用加速度计坐标,java,android,accelerometer,Java,Android,Accelerometer,我正在尝试开发一个小型android应用程序。你在控制你的角色,即宇航员,你应该收集气泡以生存。嗯,一开始我就被绊倒了。我希望角色由加速度计控制,但我无法解决我得到的错误 我的加速计是在活动游戏中实现的,在添加加速计之前就已经运行了。Game在类GameView的setContentView()实例中有一个参数,该类设置我的GameRenderer 我只需要x坐标,我需要在游戏渲染器中使用它们,特别是在movePlayer()中。所以,我在Engine类中添加了游戏实例,在这里我保存了所有这些东

我正在尝试开发一个小型android应用程序。你在控制你的角色,即宇航员,你应该收集气泡以生存。嗯,一开始我就被绊倒了。我希望角色由加速度计控制,但我无法解决我得到的错误

我的加速计是在活动游戏中实现的,在添加加速计之前就已经运行了。Game在类GameView的setContentView()实例中有一个参数,该类设置我的GameRenderer

我只需要x坐标,我需要在游戏渲染器中使用它们,特别是在movePlayer()中。所以,我在Engine类中添加了游戏实例,在这里我保存了所有这些东西,在movePlayer()中我使用Engine.Game.x


这就是问题所在。当我试着运行它时,我得到了NullPointerException,日志显示错误在第51行和第83行

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.app.Activity;


public class Game extends Activity implements SensorEventListener {
    private GameView gameView;
    SensorManager mSensorManager;
    Sensor mAccelerometer;
    public float x = 0;

 @Override
 public void onCreate(Bundle savedInstanceState){
     super.onCreate(savedInstanceState);
     gameView = new GameView(this);
     setContentView(gameView);

     mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
     mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
     mSensorManager.registerListener(this, mAccelerometer,    SensorManager.SENSOR_DELAY_NORMAL);

 }

 @Override
 protected void onResume(){
     super.onResume();
     gameView.onResume();
 }

 @Override
 protected void onPause(){
     super.onPause();
     gameView.onPause();


 }

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}

@Override
public void onSensorChanged(SensorEvent event) {
     x = event.values[0];

}


}
以下是我的movePlayer方法:

private void movePlayer(GL10 gl) {
        lastX = Engine.game.x;  //**line 83**

        if (Engine.game.x * 10 > lastX) {       
            gl.glMatrixMode(GL10.GL_MODELVIEW);
            gl.glLoadIdentity();
            gl.glPushMatrix();
            gl.glScalef(.25f, .25f, .25f);
            gl.glTranslatef(Engine.game.x, 0f, 0f);

            gl.glMatrixMode(GL10.GL_TEXTURE);
            gl.glLoadIdentity();
            gl.glTranslatef(0.25f, 0.0f, 0.0f);

            player.draw(gl);
            gl.glPopMatrix();
            gl.glLoadIdentity();
        }

        else if (Engine.game.x * 10 < lastX) {      
            gl.glMatrixMode(GL10.GL_MODELVIEW);
            gl.glLoadIdentity();
            gl.glPushMatrix();
            gl.glScalef(.25f, .25f, 1f);
            gl.glTranslatef(Engine.game.x, 0f, 0f);

            gl.glMatrixMode(GL10.GL_TEXTURE);
            gl.glLoadIdentity();
            gl.glTranslatef(0.75f, 0.0f, 0.0f);

            player.draw(gl);
            gl.glPopMatrix();
            gl.glLoadIdentity();
        }

        else {      //postava se nehýbe
            gl.glMatrixMode(GL10.GL_MODELVIEW);
            gl.glLoadIdentity();
            gl.glPushMatrix();
            gl.glScalef(.25f, .25f, 1f);
            gl.glTranslatef(Engine.game.x, 0f, 0f);
            gl.glMatrixMode(GL10.GL_TEXTURE);
            gl.glLoadIdentity();
            gl.glTranslatef(0.0f, 0.0f, 0.0f);
            player.draw(gl);
            gl.glPopMatrix();
            gl.glLoadIdentity();
        }

        }

第51行只是调用movePlayer()。我想说得非常具体,所以你们都有所有的细节,希望你们能帮助我。谢谢你的建议,我真的很绝望。

我希望
引擎。游戏
null
。很难看出您的代码是如何工作的,但如果我理解正确,您应该在游戏的
onCreate
中设置
Engine.game

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    Engine.game = this;     // <-- add this

    gameView = new GameView(this);
    setContentView(gameView);

    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

Engine.game=this;//可能
Engine
game
x
为空..?试着调试这行代码“有问题。当我尝试运行它时,我得到了NullPointerException,日志显示错误在第51行和第83行。”-NPE是最容易调试的异常。转到该行,查看哪个引用为null。如果您在那里设置断点,任何好的IDE都会立即告诉您。没有其他异常,游戏正在运行:)谢谢,您救了我的命!
@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    Engine.game = this;     // <-- add this

    gameView = new GameView(this);
    setContentView(gameView);

    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}