Después de esto: Best approach for oldschool 2D zelda-like gameAndroid OpenGL ES, desplazamiento suave
Tengo una azulejos 2D sencillo generador de trabajo, im la lectura de un mapa int [100] [100] rellena de 1 de o 0 y sacar las baldosas de acuerdo con la su ID de azulejo, 0 es agua, 1 hierba.
Im utilizando algún manejador de base de control de teclado numérico, utilizando un camIncr (32.0f), i cambia la posición de la cámara en función del movimiento:
case KeyEvent.KEYCODE_DPAD_RIGHT:
cameraPosX = (float)(cameraPosX + camIncr);
break;
En mi bucle de tracción, soy sólo dibujo suficientes fichas para encajar en mi pantalla, y rastrear el mosaico superior izquierdo usando cameraOffsetX y cameraOffsetY (es la posición de la cámara/tamaño del mosaico)
Estoy usando un GLU.gluOrtho2D para mi proyección.
Aquí es el bucle de tracción dentro de mi intérprete personalizado:
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);
mi función tiledBackground sorteo:
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 función WaterTile y grassTile .draw dibujar una baldosa de 32x32 textura, puede enviar el código si es relevante.
Todo está bien, puedo moverme usando las flechas del teclado numérico, y mi mapa 'se mueve' conmigo, ya que estoy dibujando lo que puedo ver, es rápido (ver android OpenGL ES simple Tile generator performance problem donde Aleks me señaló una simple idea de 'descarte')
Me gustaría que mi motor 'scroll suave' ahora. Intenté ajustar la variable camIncr, GLU.gluOrtho2D, etc., nada funcionó.
¿Alguna idea? :)
Podría simplemente agregar im usando 32x32 píxeles. – Dullahx
encontré esto: http://gpwiki.org/index.php/DirectX:DirectDraw:Tutorials:VB:DX7:Smooth_Scrolling_Tiles pero no puedo implementar esa lógica en mi código, cualquier ayuda sería genial. – Dullahx