GameView ( extends SurfaceView )
public GameView(Context context) {
~~~
mThread=new GameThread(mholder);
~~~
}
public void surfaceCreated(SurfaceHolder arg0) {
mThread.start();
}
이렇게 되어있구요
GameThread은
public GameThread(SurfaceHolder holder) {
~~
drawLoading();
~~
}
public void drawLoading(){
Canvas canvas=null;
canvas=mHolder.lockCanvas();
try{
synchronized(mHolder){
canvas.drawColor(Color.BLACK);
canvas.drawText("Loading...", width/2, height/2, p);
}
} catch (Exception e){
} finally{
if(canvas!=null){
mHolder.unlockCanvasAndPost(canvas);
}
}
}
이렇게 되도록 했습니다.
그러니까 로딩하기 전에 drawLoading으로 로딩 메시지를 띄웁니다.
로딩이 끝나면 이제 메인 스레드에서 게임 부분을 구현합니다.
그런데 문제는, 게임을 처음 시작하면 바로 게임 화면이 뜹니다.
drawLoading()을 하고 나서 Thread.sleep()을 쓰든 뭘 하든 로딩메시지는 뜨지 않구요,
죽으면
~~(스레드 정지)
mThread=null;
mThread=new GameThread(mholder);
mThread.start();
이렇게 되어 있습니다.
그런데 죽고 나면 게임이 멈춥니다.
죽었을때 메시지에서 멈춥니다.




자 일단 로딩..... 백버퍼 언락과 락을 다른 함수에서도 하나 보네요???
되도록 한 함수네에서 하시구요.... 이정도 소스로 문제 판별하긴 힘듭니다.
그리고 쓰레드는 종료하는데 신중을 기해야 합니다.
쓰레드는 이레저레 CPU랜덤이기에.... 예상못한 결과를 너무 잘 뱉어내요.....
게임중에는 쓰레드를 멈추는게 아닙니다....