0
目前我正在開發一些網站的應用程序,但我有點瘋狂開發遊戲應用程序,所以通過下面的教程在第一畫布上創建一個圖像級別,並在下一級圖像不得不爲此移動也給予編碼,但是當我運行該應用程序時,它會強制關閉。 這是我的代碼。空指針異常錯誤,同時運行遊戲應用程序
public class GameView extends SurfaceView {
private Bitmap bmp;
private SurfaceHolder holder;
private GameLoopThread gameLoopThread;
private int x = 0;
public GameView(Context context) {
super(context);
gameLoopThread = new GameLoopThread()
holder = getHolder();
holder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
gameLoopThread.setRunning(false);
while (retry) {
try {
gameLoopThread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
gameLoopThread.setRunning(true);
gameLoopThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format,
int width, int height) {
}
});
bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
if (x < getWidth() - bmp.getWidth()) {
x++;
}
canvas.drawBitmap(bmp, x, 10, null);
}
Thread類
public class GameLoopThread extends Thread{
private GameView view;
private boolean running = false;
public GameLoopThread(GameView view) {
this.view = view;
}
public void setRunning(boolean run) {
running = run;
}
@SuppressLint("WrongCall")
@Override
public void run() {
while (running) {
Canvas c = null;
try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}
}
}
logcat的結果
03-21 23:38:26.341: E/AndroidRuntime(754): FATAL EXCEPTION: main
03-21 23:38:26.341: E/AndroidRuntime(754): java.lang.NullPointerException
03-21 23:38:26.341: E/AndroidRuntime(754): at com.killthemall.GameView$1.surfaceCreated(GameView.java:40)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.SurfaceView.updateWindow(SurfaceView.java:543)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:348)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.View.draw(View.java:6883)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.widget.FrameLayout.draw(FrameLayout.java:357)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.View.draw(View.java:6883)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.widget.FrameLayout.draw(FrameLayout.java:357)
03-21 23:38:26.341: E/AndroidRuntime(754): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1862)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.ViewRoot.draw(ViewRoot.java:1522)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.ViewRoot.performTraversals(ViewRoot.java:1258)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.os.Handler.dispatchMessage(Handler.java:99)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.os.Looper.loop(Looper.java:123)
03-21 23:38:26.341: E/AndroidRuntime(754): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-21 23:38:26.341: E/AndroidRuntime(754): at java.lang.reflect.Method.invokeNative(Native Method)
03-21 23:38:26.341: E/AndroidRuntime(754): at java.lang.reflect.Method.invoke(Method.java:507)
03-21 23:38:26.341: E/AndroidRuntime(754): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-21 23:38:26.341: E/AndroidRuntime(754): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-21 23:38:26.341: E/AndroidRuntime(754): at dalvik.system.NativeStart.main(Native Method)
我hv粘貼了這段代碼gameLoopThread =新的GameLoopThread()在Gameview構造函數中,但仍然獲得強制關閉@Jeff Foster – 2013-04-04 09:37:17
@DD。請在您更改內容時更新您的代碼... – WarrenFaith 2013-04-04 10:03:33
已更新@WarrenFaith – 2013-04-04 11:56:55