Android Gameloop usando SurfaceView; Il cambiamento rapido dei "scatti" dei risultati dei Black lampeggia, ecc.

StackOverflow https://stackoverflow.com/questions/4975650

  •  12-11-2019
  •  | 
  •  

Domanda

Ho costruito un semplice motore di gioco usando SurfaceView.

Uso un rectf come finestra "fotocamera", per rappresentare la larghezza e l'altezza dei pixel in scala della tela di vigilanza di Surface e per capire cosa è sullo schermo.

Uso Canvas.Translate per spostarmi dove si trova la fotocamera. Ecco il ciclo di sorteggio:

mCamera.UpdateCamera();
scaleWorld(c, mCamera);
c.translate(-mScreen.left, mScreen.top - miHeight
* (1 / mCamera.getScaleLevel()));
drawBehavior.drawGame(c);

In ogni caso, se scatto un proiettile, il gioco rende senza intoppi e non vedo lampi visivi di nero, che è il colore che sto usando per lavarsi la tela.

Tuttavia, se cambio istantaneamente ciò che la fotocamera può vedere, forse 3 o più "schermi", c'è spesso, ma non sempre, lampi di nero. A volte sono "fortunato" e la transizione è senza soluzione di continuità.

Questi lampi sono generalmente nelle posizioni delle mie bitmap, mentre disegno il terreno e lo sfondo in modo ricorsivo usando una o due bitmap.

Mi è sembrato che l'improvviso cambiamento fosse il problema, quindi ho cercato di distruggere essenzialmente il thread Gameloop per fermare tutto, quindi impostare le nuove coordinate Rect, quindi riavviare con un altro thread, ma questo non funziona.

Suppongo che sulla riflessione, stavo semplicemente ritardando lo "shock" al sistema facendo questo, non trattandolo.

Prima di tentare di spazzare questo design forse atroce sotto il tappeto con forse una dissolvenza o un altro trucco visivo, mi chiedo se qualcuno abbia una comprensione più profonda del problema e potrebbe portarmi a una soluzione più elegante.

È stato utile?

Soluzione

Immagino che lo schermo sia rinfrescante prima che il sorteggio sia completo. Multi threading mi perde ancora un po ' - ma ecco qualcosa da provare: prova a bloccare la tela all'inizio del tuo loop di gioco e sbloccala alla fine:http://developer.android.com/reference/android/view/surfaceholder.html#lockcanvas()

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top