선배님들 안녕하세요 ㅠ 졸작준비중인 학부생입니다. 각설하고 본론부터 들어가면 게임을 하나 만들고 있는데,
surfaceview 와 thread 그리고 sensor 와 관련해서 테스팅중에 오류도 없는데 원하는 결과물이 나오지 않습니다 ㅠㅠ
그래서 도움을 얻고자 이렇게 글올립니다
비트맵 이미지가 센서를 통해 움직이게 만들고 싶은데, view 로 실험했을때는 잘돌아 갔는데, surfaceview 로 전환후 먹통이네요 ㅠㅠ
public class GameView extends SurfaceView implements SurfaceHolder.Callback , SensorEventListener{
private GameViewThread m_thread;//스레드 객체
SensorManager sensorManager;
int m_x =0;
int m_y =0;
public GameView (Context context){
super(context);
getHolder().addCallback(this);
m_thread = new GameViewThread(getHolder(),this);
setFocusable(true);
GameManager.getInstance().setGameView(this);
GameManager.getInstance().setResources(getResources());
sensorManager =(SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);
}//GameView
public void onDraw(Canvas canvas){
//canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.egg), m_x, m_y,null);//좌표값 표시 480x690
}//onDraw
public void Update(){
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){
((Canvas) holder).drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.egg), m_x, m_y,null);//좌표값 표시 480x690
m_thread.setRunning(true);
m_thread.start();
}
public void surfaceCreated(SurfaceHolder holder){
//메소드 실행
((Canvas) holder).drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.egg), m_x, m_y,null);//좌표값 표시 480x690
m_thread.setRunning(true);
m_thread.start();
}
public void surfaceDestroyed(SurfaceHolder holder){
boolean retry = true;
m_thread.setRunning(false);
while(retry){
try{
m_thread.join();
retry =false;
}catch (InterruptedException e){
}//try catch
}
}//surfaceDestroyed()
//-----------------------Sensor Method--------------
@SuppressWarnings("deprecation")
public void onSensorChanged(SensorEvent event){
synchronized(this){
switch(event.sensor.getType()){
case Sensor.TYPE_ORIENTATION:
float Heading = event.values[0];
float Pitch = event.values[1];
float Roll = event.values[2];
//텍스트 부분
DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
//움직이기
m_x -=(int) Roll;//x좌표값
m_y -=(int) Pitch; //y좌표값
//화면밖고정
if(m_x<=0)
m_x=0;
if(m_y<=0)
m_y=0;
if(m_x>= 300)
m_x = 300;
if(m_y>= 390)
m_y = 400;
break;
}
}
invalidate();
}
public void onAccuracyChanged(Sensor arg0, int arg1){
}
}//end of class