선배님들 안녕하세요 ㅠ 졸작준비중인 학부생입니다. 각설하고 본론부터 들어가면 게임을 하나 만들고 있는데,

 

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