09-20 11:13:13.780: E/AndroidRuntime(509): FATAL EXCEPTION: main
09-20 11:13:13.780: E/AndroidRuntime(509): java.lang.NullPointerException
09-20 11:13:13.780: E/AndroidRuntime(509): at com.flysky.GameView.onTouchEvent(GameView.java:129)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.view.View.dispatchTouchEvent(View.java:3766)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863)
09-20 11:13:13.780: E/AndroidRuntime(509): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1671)
09-20 11:13:13.780: E/AndroidRuntime(509): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.app.Activity.dispatchTouchEvent(Activity.java:2086)
09-20 11:13:13.780: E/AndroidRuntime(509): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1655)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.view.ViewRoot.handleMessage(ViewRoot.java:1785)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.os.Handler.dispatchMessage(Handler.java:99)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.os.Looper.loop(Looper.java:123)
09-20 11:13:13.780: E/AndroidRuntime(509): at android.app.ActivityThread.main(ActivityThread.java:4627)
09-20 11:13:13.780: E/AndroidRuntime(509): at java.lang.reflect.Method.invokeNative(Native Method)
09-20 11:13:13.780: E/AndroidRuntime(509): at java.lang.reflect.Method.invoke(Method.java:521)
09-20 11:13:13.780: E/AndroidRuntime(509): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
09-20 11:13:13.780: E/AndroidRuntime(509): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
09-20 11:13:13.780: E/AndroidRuntime(509): at dalvik.system.NativeStart.main(Native Method)
인대요 머가 잘못된지 모르겠네요 찾아보니까 소스도 올려달라니까 동봉합니다.
public class GameView extends SurfaceView implements Callback {
GameThread mThread;
SurfaceHolder mHolder;
//생성자
public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
SurfaceHolder holder = getHolder();
holder.addCallback(this);
mThread = new GameThread(holder, context);
setFocusable(true);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mThread.start();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
//-----------------------------------------
//Thread
//-----------------------------------------
class GameThread extends Thread{
SurfaceHolder mHolder;
int width, height; //실제화면 크기
int x, y, cx, cy; //캐릭터좌표, 캐릭터크기
int sx, sy; //캐릭터 방향
int num; //캐릭터 이미지 번호
int px, py, psx, psy;//구름 좌표, 속도
int oy;
int x1, y1;
Bitmap imgBack;
Bitmap man[] = new Bitmap[2];
Bitmap icon1;
Bitmap icon2;
//----
//생성자
//----
public GameThread(SurfaceHolder holder, Context context){
mHolder = holder;
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
width = display.getWidth();
height = display.getHeight();
man[0] = BitmapFactory.decodeResource(getResources(), R.drawable.man);
cx=man[0].getWidth();
cy=man[0].getHeight();
x = width/2;
y = 200;
oy= width-150;
imgBack = BitmapFactory.decodeResource(getResources(), R.drawable.sea);
imgBack = Bitmap.createScaledBitmap(imgBack, width, height, false);
icon1 = BitmapFactory.decodeResource(getResources(), R.drawable.icon1);
icon2 = BitmapFactory.decodeResource(getResources(), R.drawable.icon2);
}
public void MoveMan(int x1, int y1){
if(width/2 < x1){
x+=3;
}else{
x-=3;
}
}
public void run(){
Canvas canvas = null;
while(true){
canvas = mHolder.lockCanvas();
try{
synchronized(mHolder){
canvas.drawBitmap(imgBack, 0, 0, null);
canvas.drawBitmap(man[0], x-cx, y-cy, null);
canvas.drawBitmap(icon1, 0, 500, null);
canvas.drawBitmap(icon2, oy, 500, null);
}
}finally{
if(canvas != null)
mHolder.unlockCanvasAndPost(canvas);
}
}
}
}
@Override
public boolean onTouchEvent(MotionEvent event){
mThread.x1 = (int)event.getX();
mThread.y1 = (int)event.getY();
if (event.getAction() == MotionEvent.ACTION_DOWN){
synchronized(mHolder){
mThread.MoveMan(mThread.x1 ,mThread.y1);
}
}
return true;
}
}
부탁드립니다 항상 보고 있어서 댓글달리면 바로 뛰어오겠습니다.
부탁드릴께요