Quando in Android dovrei inserire il loop di gioco principale nella classe di attività iniziale?

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

Domanda

Sto cercando di creare un loop di gioco usando Questo tutorial.

Ho cercato di implementarlo nella classe di attività iniziale come mostrato di seguito, ma ho riscontrato alcuni problemi. Ho richiesto il fullcreen e nessuna funzionalità del titolo come mostrato, ma non li ottengo e il requestNender non funziona.

Quando "Running" è impostato su False, allora il loop di gioco viene saltato e il rendering rende un frame (rendermode impostato su sporco)

Questo non è qualcosa che fa quando corre = vero.

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;



public class Practice extends Activity {

private Input input;
private GLSurfaceRenderer glSurfaceRenderer;
private final static int maxFPS = 30;
private final static int maxFrameSkips = 5;
private final static int framePeriod = 1000 / maxFPS;
public final static String TAG = "input";

public boolean running = true;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    input = new Input(this);
    setContentView(input);

    long beginTime;
    long timeDiff;
    int sleepTime;
    int framesSkipped;

    sleepTime = 0;
    while (running) {
        Log.d(TAG, "gameRunning");
        beginTime = System.currentTimeMillis();
        framesSkipped = 0;
        this.input.update();
        this.input.requestRender();
        timeDiff = System.currentTimeMillis() - beginTime;
        sleepTime = (int)(framePeriod - timeDiff);

        if (sleepTime > 0) {
            try{
                Thread.sleep(sleepTime);
            }catch(InterruptedException e){}
        }

        while(sleepTime < 0 && framesSkipped < maxFrameSkips){
            this.input.update();
            sleepTime += framePeriod;
            framesSkipped++;
            Log.d(TAG, "Frames Skipped");
        }

    }
}
}

Al momento la logica del gioco sta aggiornando bene, ma il rendering non sta affatto rendering (solo uno schermo nero)

Sono abbastanza sicuro che questo sia solo un semplice rimodellamento del codice ma qualcuno ha qualche suggerimento?

Nessuna soluzione corretta

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