Domanda

Ho usato Questo tutorial Per creare un ciclo di gioco.

Nella sezione contrassegnata "FPS dipendente dalla velocità del gioco costante" c'è un codice di esempio che include un comando di sonno

Ho cercato su Google l'equivalente di Java e l'ho trovato

Thread.sleep();

Ma restituisce un errore in Eclipse

Unhandled exception type InterruptedException

Cosa diavolo significa questo.

E mi chiedevo anche cosa

update_game();
display_game(); 

I metodi possono contenere in un gioco OpenGL-ES (cioè: dov'è il rendering aggiornato e quale tipo di cose accadono in display_game ();

Attualmente sto utilizzando un sistema che utilizza le funzionalità GlsUrfaceView e GlsUrfaceRenderer

Ecco il mio adattamento del codice nel tutorial

public Input(Context context){
    super(context);
    glSurfaceRenderer = new GLSurfaceRenderer();
    checkcollisions = new Collisions();
    while (gameisrunning) {
    setRenderer(glSurfaceRenderer);


    nextGameTick += skipTicks;
    sleepTime = nextGameTick - SystemClock.uptimeMillis();
    if(sleepTime >= 0) {
        Thread.sleep(sleepTime);
    }else{
        //S*** we're behind
    }

    }

Questo è chiamato nel mio Glsurfaceview anche se non sono sicuro che questo sia il posto giusto per implementarlo.

È stato utile?

Soluzione

Sembra che tu debba passare un paio di tutorial su Java prima di provare ad affrontare lo sviluppo del gioco Android. Quindi leggi alcuni tutorial sullo sviluppo di Android, quindi alcuni tutorial di sviluppo del gioco più generali. (La programmazione è un sacco di lettura.)

La discussione sta lanciando un eccezione Quando viene interrotto. Devi dire a Java come affrontarlo.

Per rispondere direttamente alla tua domanda, ecco un metodo che dorme fino a un momento specifico:

private void waitUntil(long time) {
    long sleepTime = time - new Date().getTime();

    while (sleepTime >= 0) {
        try {
            Thread.sleep(sleepTime);
        } catch (InterruptedException e) {
            // Interrupted. sleepTime will be positive, so we'll do it again.
        }
        sleepTime = time - new Date().getTime();
    }
}

Dovresti capire almeno questo metodo prima di continuare lo sviluppo del gioco.

Altri suggerimenti

Ironia della sorte, il codice di Ron Romero non funziona. Ci sono due problemi con esso: il ciclo while e la variabile del sonno.

La variabile di sonno è impostata in base a un tempo specificato (in millisecondi) per dormire. Ci vuole il tempo e lo sottrae dal tempo di millisecondi attuali. Il problema è che l'attuale tempo di millisecondi è un numero enorme (da cui il tipo di variabile lungo), che fornisce un numero di tempo di sonno negativo. Non inserirai mai il ciclo while con questo codice.

La seconda cosa che non va è il controllo del loop se stesso. Utilizzando la funzione del sonno in Java, non è necessario fare un giro come questo. Tutto quello che devi fare è passare il tempo di sonno per cui vuoi dormire a millisecondi alla funzione del sonno e funzionerà bene.

private void waitUntil(long time) {
    try {
        Thread.sleep(time);
    } 
    catch (InterruptedException e) {
    //This is just here to handle an error without crashing
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top