기본 SurfaceView에 스레드1를 놓고 스레드1에는 배경같은 움직이지 않는 고정 이미지를 배치하고, 화면을 처리하면 스레드2를 불러서 스레드2에서는 sleep으로 시간을 조정해서 빠르게 움직이는 이미지를 표시하려고 합니다.
Surfaceview에 holder랑 이용해서 스레드1에 이미지를 표시하는건 잘 되는데...surfaceview안에 스레드를 하나 더 만들고 그걸 부르는게 안됩니다...터치다운 이벤트에서 스레드2를 start걸면 에러나면서 튕겨버립니다 ㅠ.ㅠ...
public class MainActivity extends Activity {
GameThread2 gamethread2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyGameView(this));
}
public class MyGameView extends SurfaceView implements Callback {
GameThread mThread;
SurfaceHolder mHolder;
Bitmap topgaugebar, touchzone, gauge ,mapView, caracterView, monsterView ;
Bitmap effect_roundboom[] = new Bitmap[6];
public MyGameView(Context context) {
super(context);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
mThread = new GameThread(context, holder);
gamethread2 = new GameThread2();
}
public void surfaceCreated(SurfaceHolder arg0) {
mThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
class GameThread extends Thread {
//--------------------------------------
// Thread Constructor
//--------------------------------------
public GameThread(Context context, SurfaceHolder holder) {
mHolder = holder;
topgaugebar = Bitmap.createScaledBitmap(topgaugebar, S_TopGbarX, S_TopGbarY, true);
mapView = Bitmap.createScaledBitmap(mapView, S_MapX, S_MapY, true);
}
public void run() {
Canvas canvas = null;
canvas = mHolder.lockCanvas();
try {
synchronized (mHolder) {
canvas.drawBitmap(topgaugebar, 0, 0, null);
canvas.drawBitmap(mapView, 0, S_TopGbarY, null);
}
}
catch(Exception ee){}
finally {
mHolder.unlockCanvasAndPost(canvas);
}
} // run()
} // Thread 끝
class GameThread2 extends Thread {
public GameThread2() {
}
public void run() {
} // run()
} // Thread 끝
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// gamethread2 = new GameThread2();
gamethread2.start();
}
return true;
}
}
소스는 선언하는부분이나 기타 이미지 표시에 관련된부분은 거의 다 지우고 보기쉽게 구조만 남겨놨습니다.
GameThread는 맨 처음 어플 기동하면 잘 움직입니다...헌데 터치리스너에서 gamethread2.start();를하면 에러가 납니다...그리고 여기서 에러가나서 계속 확인을 못하고있는데...
SurfaceView에서 선언하고 초기화한 holder같은건 스레드마다 따로만들 필요 없이 하나만 만들어서 다 같이 쓰면 되는건가요? 4일째 헤매다가 질문드립니다 ㅠ.ㅠ...질문내용에 부족한부분이나 부가설명같은게 필요하시면 알려주세요 최대한 자세히 추가하겠습니다. 도움좀 주시면 감사하겠습니다 ㅠ