2017-02-24 15 views
1

나는 테트리스 앱을 개발 중이며 Thread.sleep 명령을 사용하여 테트 리미 노스가 떨어지는 것을 애니메이션으로 표시합니다. 하지만 UI와 충돌이 발생합니다. 그래서 나는 다음과 같이 runOnUiThread()를 시도했다.while 루프에서 Android-UI를 업데이트하는 가장 좋은 방법

while (gameover == false) { 
    tetriminoSettled = false; 
    try { 
     Thread.sleep(1000 - (counter * 3)); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Random ran = new Random(); 
      int x = ran.nextInt(7) + 1; 
      addTetrimino(createTetrimino(x)); //the UI operation 
      gridView.invalidate(); 
     } 
    }); 

그러나 UI는 게임이 끝난 후에 만 ​​업데이트된다. AsyncTask가 좋은 접근 방법이라고 생각하십니까? 나중에 테트 리미 네스를 왼쪽이나 오른쪽으로 이동시키기 위해 UI 스레딩이 추가로 필요하다는 것을 명심하십시오. 감사합니다.

답변

1

게시 한 코드를 보면 게임에 대한 gridview를 사용하고있는 것처럼 보입니다. 가능하지만 노력할만한 가치가 없습니다. 이 짧은 tutorial에 표시된 것처럼 SurfaceView를 사용하면됩니다. 모든 드로잉주기마다 원하는대로 업데이트 할 수있는 onDraw 콜백이 있습니다. 즐겁게, 코딩 게임은 정말 어렵습니다 :).

+0

당신은 나를 잡았어! * g * 나는 그것이 테트리스에도 적용될 수 있다고 생각했지만, 거기에 더 나은 방법이 있다는 것도 확신했다. 튜토리얼을 살펴 보겠습니다. 감사합니다 – user1734984

+0

그것은 테트리스에 적용 할 수 있지만, 게임에서 여러 스레드를 직접 처리하고 싶지 않습니다. 그것의 공포. – Cottontree

0

try gridView.postInvalidate();