2017-02-24 2 views
1

Ich arbeite an einer Tetris-App und ich habe einen Thread.sleep Befehl, um das Fallen der Tetriminos zu animieren. Aber das erzeugt einen Konflikt mit der Benutzeroberfläche. So habe ich runOnUiThread() so ausprobiert:Beste Methode Android-UI in der While-Schleife zu aktualisieren

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(); 
     } 
    }); 

Aber die UI wird nur aktualisiert, nachdem das Spiel endet. Glaubst du, AsyncTask ist ein guter Ansatz? Bitte beachte, dass ich später zusätzliche UI-Threads benötige, um die Tetriminos nach links und rechts zu verschieben und so weiter. Danke!

Antwort

1

Gemessen am Code, den Sie gepostet haben, sieht es so aus, als ob Sie eine Gridview für ein Spiel verwenden. Es ist möglich, aber nicht die Mühe wert. Verwenden Sie einfach ein SurfaceView, wie in dieser kurzen Abbildung gezeigt tutorial. Sie haben einen OnDraw-Callback, in dem Sie jeden Zeichenzyklus aktualisieren können. Viel Spaß, Coding-Spiele sind wirklich schwer :).

+0

Sie haben mich erwischt! * G * Ich dachte, es könnte für Tetris gelten, aber ich war mir auch sicher, dass es bessere Möglichkeiten gibt, es zu tun. Ich werde in das Tutorial schauen. Danke – user1734984

+0

Es kann für Tetris anwendbar sein, aber Sie möchten nicht mehrere Threads in einem Spiel allein behandeln. Es ist nur Horror. – Cottontree

0

Versuchen Sie gridView.postInvalidate();

Verwandte Themen