A seguito di questo: Best approach for oldschool 2D zelda-like gameAndroid OpenGL ES, scorrimento continuo
ho avuto un semplice piastrelle 2D generatore di lavoro, im lettura di una mappa int [100] [100] riempita di 1 del o 0 di e disegnare le piastrelle in base alle il loro id di piastrella, 0 è acqua, 1 erba.
Im usando un po 'di gestore di controllo di base tastierino numerico, utilizzando un camIncr (32.0f), ho impostato la posizione della fotocamera in base al movimento:
case KeyEvent.KEYCODE_DPAD_RIGHT:
cameraPosX = (float)(cameraPosX + camIncr);
break;
Nel mio ciclo pareggio, im solo disegno abbastanza piastrelle per adattarsi su il mio schermo e traccia il riquadro in alto a sinistra usando cameraOffsetX e cameraOffsetY (la posizione della telecamera/dimensione della piastrella)
Im usando un GLU.gluOrtho2D per la mia proiezione.
Ecco il ciclo sorteggio all'interno del mio renderer personalizzato:
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, 0, scrWidth, scrHeight, 0);
repere.draw(gl, 100.0f); // this is just a helper, draw 2 lines at the origin
//Call the drawing methods
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
tiledBackground.draw(gl, filtering);
mia funzione tiledBackground pareggio:
int cols = (569/32) + 2; // how many columns can fit on the screen
int rows = (320/32) + 1; // haw many rows can fit on the screen
int cameraPosX = (int) Open2DRenderer.getCameraPosX();
int cameraPosY = (int) Open2DRenderer.getCameraPosY();
tileOffsetX = (int) (cameraPosX/32);
tileOffsetY = (int) (cameraPosY/-32);
gl.glPushMatrix();
for (int y = 0; y < rows; y++) {
for (int x = 0; x < cols; x++) {
try {
tile = map[y + tileOffsetY][x + tileOffsetX];
} catch (Exception e) {
e.printStackTrace(); //when out of array
tile = 0;
}
gl.glPushMatrix();
if (tile==0){
waterTile.draw(gl, filter);
}
if (tile==4) {
grassTile.draw(gl, filter);
}
gl.glTranslatef(32.0f, 0.0f, 0.0f);
}//
gl.glPopMatrix();
gl.glTranslatef(0.0f, 32.0f, 0.0f);
}
gl.glPopMatrix();
}
la funzione waterTile e grassTile .draw disegnare una piastrella 32x32 strutturato, potrebbe inviare il codice se rilevante.
Tutto va bene, posso spostare usando le frecce del tastierino numerico, e la mia mappa 'si muove' con me, dal momento che im solo disegnare quello che posso vedere, la sua veloce (vedi android OpenGL ES simple Tile generator performance problem dove Aleks mi ha segnalato un semplice 'abbattimento' idea)
Mi piacerebbe che il mio motore "scorre liscio" ora. Ho provato a modificare la variabile camIncr, il GLU.gluOrtho2D ecc., Niente ha funzionato.
Qualche idea? :)
Potrei semplicemente aggiungere im usando piastrelle 32x32 px. – Dullahx
ho trovato questo: http://gpwiki.org/index.php/DirectX:DirectDraw:Tutorials:VB:DX7:Smooth_Scrolling_Tiles ma non posso implementare quella logica nel mio codice, qualsiasi aiuto sarebbe fantastico. – Dullahx