|
> -----Mensaje Original----- > Desde: Manuel Alejandro Cerón [mailto:rdceron@...] > Enviado: Viernes 9 de Agosto de 2002 03:27 AM > Para: allegro-espanol@yahoogroups.com > Tema: Re: [AL-ES] Cómo se evita el parpadeo? > > Hola Sidus. > > En primer lugar creo que el tuturial en español del que hablas estoy casi > seguro que es el de Artebinario (digo casi seguro por el codigo que muestras > es del tutorial). este tutorial es bueno para aprender el paradigma de > programacion orientado a objetos en los videojuegos pero definitivamente no > es bueno para aprender ALLEGRO. Si quieres aprender Allegro deberás > consultar un tutorial en ingles (por ahora), yo te recomiendo VIVACE. > > Ahora, para evitar el parpadeo debes usar una tecnica que se conoce como > DoubleBuffering y que consiste en dibujar primero en una pantalla virutal > (un sector de la memoria) y despues copiar esa pantalla virtual a la > pantalla real. En tu codigo la pantalla virtual seria el BITMAP buffer, el > problema consiste en que lo estas usando de forma inapropiada. El codigo > correcto seria algo como esto (solo la parte del movimiento): > > //************************************************* > buffer = create_bitmap (SCREEN_W, SCREEN_H); //EN PRIMER LUGAR EL buffer O > PANTALLA VIRTUAL DEBE SER DEL MISMO TAMAÑO DE LA PANTALLA REAL > > clear(buffer); //LIMPIO EL BUFFER > x = SCREEN_W/2; > y = SCREEN_H/2; > > while (!key[KEY_ESC]) { > > if ( key[KEY_UP] && y>0) y--; //si presiona > arriba y no se ha salido de la pantalla se corre para arriba > if ( key[KEY_DOWN] && y<SCREEN_H) y++; //se corre para > abajo > if ( key[KEY_LEFT] && x>0) x--; //se corre para la > izquierda > if ( key[KEY_RIGHT] && x<SCREEN_W) x++; //se corre para > la derecha > > draw_sprite (buffer, image, x, y); //PRIMERO DIBUJA EL SPRITE O > IMAGEN EN LA PANTALLA VIRTUAL > blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H); //LUEGO COPIA EL > buffer A LA PANTALLA REAL (screen) > } > //*************************************************** > > Espero que te sirva, esto debe eliminar completamente el parpadeo, si de > todos modos no funciona puedes usar la funcion vsync() justo antes del blit > esta funcion garantiza que no habra parpadero, lo malo es que vuelve mas > lento el juego. > > Cualquier cosa que necesites solo pregunta > > Saludos, > > Manuel Alejandro Cerón > > ----- Original Message ----- > From: "Sidus" <sidus@...> > To: <allegro-espanol@yahoogroups.com> > Sent: Sunday, August 31, 2003 7:15 PM > Subject: [AL-ES] Cómo se evita el parpadeo? > > > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > Hola: > > Tengo el siguiente problema. > > Cuando trato de "mover" una imagen utilizando el cursor; esa imagen > parpadea > > constantemente. > > No se cómo solucionarlo. Se me ocurre que tal vez debería usar una función > de > > temporización, pero no tengo ni idea de cómo hacerlo. La ayuda de Allegro > es > > demasiado técnica para mí. > > Adjunto el código que hice hasta ahora. > > ¿Saben de algún tutorial en español que explique un poco más la > programación > > de juegos con Allegro? Hasta ahora solamente encontré uno, y explica muy > > poco, casi nada. > > Desde ya muchas gracias. > > > > #include "allegro.h" > > int main(int argc, char *argv[]) > > { > > PALETTE pal; > > int x, y, x_anterior, y_anterior; > > BITMAP *image; > > > > BITMAP *buffer; //PARA EL MOVIMIENTO > > > > allegro_init(); > > install_keyboard(); > > set_color_depth(8); > > if (set_gfx_mode(GFX_AUTODETECT, 1024, 768, 0, 0) != 0) { > > allegro_message("Error al establecer el modo > gráfico\n%s\n",allegro_error); > > return 1; > > } > > image =load_bitmap("allegro.pcx", pal); > > set_palette(pal); > > > > > //-----------------------------------------------------------------------// > > // TODO LO QUE SIGUE ES AGREGADO PARA EL MOVIMIENTO > > > //-----------------------------------------------------------------------// > > buffer = create_bitmap (image -> w, image -> h); > > clear(buffer); //LIMPIO EL BUFFER > > x = SCREEN_W/2; > > y = SCREEN_H/2; > > > > while (!key[KEY_ESC]) { > > > > if (key[KEY_UP]) y--; > > > > if (key[KEY_DOWN]) y++; > > > > if (key[KEY_LEFT]) x--; > > > > if (key[KEY_RIGHT]) x++; > > > > if (x<0) x=x_anterior; > > > > if (x>SCREEN_W-image->w) x=x_anterior; > > > > if (y<0) y=y_anterior; > > > > if (y>SCREEN_H-image->h) y=y_anterior; > > > > if ((x_anterior != x) || (y_anterior != x)) { > > blit (buffer, screen, 0, 0, x_anterior, y_anterior, buffer -> w, buffer -> > h); > > blit (screen, buffer, x, y, 0, 0, buffer -> w, buffer -> h); > > draw_sprite ( screen, image, x, y); > > } > > x_anterior = x; > > y_anterior = y; > > > > } > > > > return 0; > > } > > END_OF_MAIN(); > > > > > > - -- > > Llave Gnupg en: > > http://pgp.rediris.es:11371/pks/lookup?op=get&search=0x6F1FD83E > > > > Key fingerprint = F619 9CB9 8E42 0287 8386 D2ED AEBA 0FC5 6F1F D83E > > > > > > > > -----BEGIN PGP SIGNATURE----- > > Version: GnuPG v1.0.4 (GNU/Linux) > > Comment: For info see http://www.gnupg.org > > > > iEYEARECAAYFAj9Sj7YACgkQrroPxW8f2D59/QCfeEzdTu3WMNuaRb+G2BC0yqEK > > G9gAn0mjTjkBP+IeoqYvuUN7WvQSCMzw > > =qsEF > > -----END PGP SIGNATURE----- > > > > _______________________________________________ > > Para cancelar su subscripción envíe un email a: > > allegro-espanol-unsubscribe@egroups.com > > > > > > La utilización de Yahoo! Grupos está sujeta a su aceptación de las > > Condiciones del servicio (http://es.docs.yahoo.com/info/utos.html) así > > como de la Política de privacidad (http://privacy.yahoo.com/es/). > > > > > > > > > > > Tienen razon , para evotar parpadeo se usan pantallas virtuales, hacesa la original, en otra escribes y luego las vacias. > > > _______________________________________________ > Para cancelar su subscripción envíe un email a: > allegro-espanol-unsubscribe@egroups.com > > > La utilización de Yahoo! Grupos está sujeta a su aceptación de las > Condiciones del servicio (http://es.docs.yahoo.com/info/utos.html) así > como de la Política de privacidad (http://privacy.yahoo.com/es/). > > > >
Todito.com, tu centro de comunicación, información,
comercio y entretenimiento en Internet.
|
Vie, 9 de Ago, 2002 1:58 pm
"Osvaldo Gustavo Martinez Ramirez" <ogmr@...>
ogmr2001
Sin conexión Enviar mensaje
|