我正在尝试开发一个小型 android 应用程序。你正在控制你的角色,即宇航员,你应该收集气泡来生存。好吧,我一开始就被卡住了。我希望角色由加速度计控制,但我无法解决我得到的错误。
我的加速度计是在活动游戏中实现的,它在添加加速度计之前工作。游戏在 GameView 类的 setContentView() 实例中作为参数,它设置了我的 GameRenderer。
我只需要 x 坐标,我需要在我的 GameRenderer 中使用它们,特别是在 movePlayer() 中。因此,我将 Game 的实例添加到了我的 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();
}
}
这是我的引擎中的游戏实例:
public static Game game;
第 51 行只是调用 movePlayer()。我试图非常具体,所以你们有所有的细节,希望你能帮助我。谢谢你的建议,我真的很绝望。