Problemi con la grafica nel gioco Android 2D
Domanda
Ho scritto il gioco 2D per Android usando OpenGL e ho problemi. Ho usato Eclipse. Quando inizio il gioco sull'emulatore vedo solo l'immagine di sfondo e sento musica di sottofondo ed effetti sonori. Non ci sono grafici e sprite sullo schermo. Sul dispositivo reale (con Android 2.2) è lo stesso risultato. Questo è il mio logcat:
E/AndroidRuntime (328): Eccezione fatale: Glthread 9
E/AndroidRuntime (328): java.lang.indexoutofboundSeception: indice non valido 1, dimensione è 0 e/androidruntime (328): su java.util.arraylist.hrowindexoutofboundsexception (arraylist.java:257) e/androidrunt (328) java.util.arraylist.get (arraylist.java:311)
E/AndroidRuntime (328): at arek.jumper.gamescreen.updategameover (Gamescreen.java:166)
E/AndroidRuntime (328): at arek.jumper.gamescreen.update (Gamescreen.java:86)
E/AndroidRuntime (328): at game.framework.impl.glgame.ondrawFrame (glgame.java:94) e/AndroidRuntime (328): su Android.opengl.glsurfaceView $ GlThread.GuardedRun (glsurfaceview.java:1332)
E/AndroidRuntime (328): su Android.opengl.glsurfaceview $ glThread.run (Glsurfaceview.java:1116)
Il metodo UpdategameOver:
private void updateGameOver() {
List<TouchEvent> touchEvents = game.getInput().getTouchEvents();
int len = touchEvents.size();
for(int i = 0; i < len; i++) {
TouchEvent event = touchEvents.get(i);
if(event.type != TouchEvent.TOUCH_UP)
continue;
game.setScreen(new MainMenuScreen(game));
}
}
Il metodo di aggiornamento:
@Oltrepassare
public void update(float deltaTime) {
if(deltaTime > 0.1f)
deltaTime = 0.1f;
switch(state) {
case GAME_READY:
updateReady();
break;
case GAME_RUNNING:
updateRunning(deltaTime);
break;
case GAME_PAUSED:
updatePaused();
break;
case GAME_LEVEL_END:
updateLevelEnd();
break;
case GAME_OVER:
updateGameOver();
break;
}
}
e ondrawframe:
@Oltrepassare
public void onDrawFrame(GL10 gl) {
GLGameState state = null;
synchronized(stateChanged) {
state = this.state;
}
if(state == GLGameState.Running) {
float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f;
startTime = System.nanoTime();
screen.update(deltaTime);
screen.present(deltaTime);
}
if(state == GLGameState.Paused) {
screen.pause();
synchronized(stateChanged) {
this.state = GLGameState.Idle;
stateChanged.notifyAll();
}
}
if(state == GLGameState.Finished) {
screen.pause();
screen.dispose();
synchronized(stateChanged) {
this.state = GLGameState.Idle;
stateChanged.notifyAll();
}
}
}
Metodo Oncreate:
@Override public void oncreate (pacchetto savedinstancestate) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
glView = new GLSurfaceView(this);
glView.setRenderer(this);
setContentView(glView);
glGraphics = new GLGraphics(glView);
fileIO = new AndroidFileIO(getAssets());
audio = new AndroidAudio(this);
input = new AndroidInput(this, glView, 1, 1);
PowerManager powerManager = (PowerManager)
getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "GLGame");
}
È un problema con la libreria OpenGL ES? Qualcuno ha qualche consiglio su questo? Come risolverlo? Molte grazie
Nessuna soluzione corretta