2012-04-25 4 views
0

Android에서 작은 게임을 개발 중이며 질문이 있습니다. 내 메인 게임 루프를 SurfaceView에서 호출 된 스레드로하고 싶지만이 스레드에서 다른 클래스의 메서드를 호출 할 때마다 "예기치 않게 중지되었습니다"라는 메시지가 나타납니다. Android SurfaceView/스레드 업데이트 게임 상태

더 명확하게하려면 :

@Override 
public void run() { //Game Loop 
    Canvas canvas = null; 
    while (mRun) {    
     canvas = mHolder.lockCanvas();     
     if (canvas != null) { 
     grub.updateGrubber(); //here I want to update state.     
     mPanel.doDraw(canvas); 
     mHolder.unlockCanvasAndPost(canvas);     
     } 
    } 
} 

라인 grub.updateGrubber(); 전에 언급 한 오류를 보여주십시오. 나는 그 클래스에서 다른 방법을 시도하고 그들 모두는 나에게 같은 오류를 준다.

도움이 될 것입니다.

+0

더 나은 logcat 게시 – Akhil

답변

1

실제로 당신이 제안하고 나쁜 생각은 아니지만, 내 코드에 문제가 내가 정말 Grubber 객체를 생성 결코 무엇인지 테스트하고있어 (내가 = new Grubber(); 부분을 그리워).

아마도 지난 몇 주 동안 내가 해낸 엄청난 양의 코드 작성 및 테스트와 관련된 실수 일 수 있습니다. 죄송합니다. 어쨌든 나는 메인 게임 루프로서 내가 읽은 바에 따라 표면 뷰에서 캔버스를 업데이트하기 위해 생성 된 스레드를 사용하려고합니다. here.

1

내 추측이 맞으면 UI 스레드를 직접 업데이트하려고합니다. 주 스레드가 아닌 스레드에서 UI 메서드를 호출 할 수 없습니다. 시도 :

Runnable action = new Runnable() { 
      @Override 
      public void run() {  

       grub.updateGrubber(); 
       }  }; 
       this.post(action); 
instead of your `grub.updateGrubber();` line.