Entrar
¿Usuario nuevo? Regístrate
allegro-espanol · Una lista en español sobre la librería Allegro.
? ¿Ya estás suscrito? Entrar en Yahoo!

Consejos de Yahoo! Grupos

¿Sabías que...?
Puedes buscar mensajes antiguos en un grupo.

Mensajes

  Mensajes Ayuda
Avanzado
Re: [AL-ES] Funciones   Lista de mensajes  
Responder | Reenviar Mensaje #763 de 9896 |
Re: [AL-ES] Funciones

Wenas, el problema q tienes es q no tienes un bucle en el q las dos funciones q utilizas se esten ejecutando hasta q se pulse la tecla escape (parece q quieres q ese sea el fin del juego). Si situas las funciones como las has puesto, se ejecutara una y despues la otra, acabando el juego a continuacion. Con suerte se te movera algo con la primera funcion sin redibujarse lo de la segunda, o una vez q pulses escape como parece q la condicion de fin es la misma en ambas funciones ni entrara en el bucle de la segunda funcion, etc. Mi consejo: create un bucle unicamente, y en el llamas a las funciones de posicionamiento de cada objeto q aparezca y se mueva en el juego, redibujando todo lo q se vaya a poder mover al final del bucle. Espero haberte sido de ayuda en algo. :)

Sidus(e)k idatzi du:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hola:
Nuevamente recurro a ustedes porque tengo un problema que me esta volviendo
loco. Estoy seguro que este problema no es de Allegro sino de Programación en
general (soy nuevo en las dos cosas)
Les cuento:
1) Intente hacerlo por mi mismo, pero la mayoria de los ejemplos que vienen
con Allegro no los entiendo (demasiado complicados para mi).
2) Lo pregunte en una lista de correo de programación en general (ni siquiera
me saludaron) ¿tan horrible es el código que hice?
3) Lo pregunte en otra lista de programación de juegos en general (me tiraron
una idea)
4) Por lo que ahora me veo obligado a preguntar en esta lista.

Bueno, el problema es que tengo dos funciones; una carga la imagen y el
movimiento de una nave; la otra carga la imagen y el movimiento del enemigo.
En el código que adjunto solo funciona la primer función que invoco.
Supongo que para que esto funcione el blit se tendría que ejecutar en main.
Pero no tengo idea de como retornar el "draw" que esta en cada
una de las funciones. O tal vez no sea nada de eso.
El programa original esta hecho sin funciones (y funciona), pero cuando algún
día se me antoje modificarlo o agregarle cosas me voy a volver loco.
Es por eso que lo quiero hacer con funciones.

Desde ya muchísimas gracias a todos.

#include "allegro.h"
int main(int argc, char *argv[])      {
PALETTE pal;
BITMAP *buffer, *imagen_enemigo, *imagen_nave;

allegro_init();
install_keyboard();
set_color_depth(8); // FIJO EL MODO A 256 COLORES

if (set_gfx_mode(GFX_AUTODETECT, 1024, 768, 0, 0) != 0)        {
   allegro_message("Error setting graphics mode\n%s\n", allegro_error);
   return 1;
                                                               }

imagen_enemigo = load_bitmap("imagen_enemigo.pcx", pal);
imagen_nave = load_bitmap("imagen_nave.pcx", pal);

set_palette(pal);  //ESTABLEZCO UNA UNICA PALETA PARA TODOS LOS GRAFICOS

buffer = create_bitmap (SCREEN_W, SCREEN_H);

/*-------------------------------------------------------------------------
//          CADA UNA DE ESTAS FUNCIONES TRABAJA BIEN EN FORMA SEPARADA
//         PERO SOLO FUNCIONA LA QUE INVOCO PRIMERO
//             EN ESTE CASO NO ME CARGA LA NAVE
//-----------------------------------------------------------------------*/

CARGAR_Y_MOVER_ENEMIGO (buffer, imagen_enemigo);      //ESTA FUNCIONA BIEN
MOVETE_NAVE (buffer, imagen_nave);     //NO CARGA LA IMAGEN DE LA NAVE

readkey();

return 0;
}
END_OF_MAIN();

CARGAR_Y_MOVER_ENEMIGO (BITMAP *buffer, BITMAP *imagen_enemigo) {
int y_enemigo = 10;
int x_enemigo = 500;
    while (!key[KEY_ESC])  {

            if (x_enemigo > 20) {  //REBOTA EL ENEMIGO HACIA LA IZQUIERDA
                  x_enemigo = x_enemigo - 20;

                  draw_sprite (buffer, imagen_enemigo, x_enemigo, y_enemigo);

                  blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);

                  clear(buffer); //LIMPIO EL BUFFER

                                 }

                   if (x_enemigo == 20) {  //REBOTA ENEMIGO HACIA  LA DERECHA
                                while (x_enemigo < 915) {
                                    x_enemigo = x_enemigo + 20;
                                    draw_sprite (buffer, imagen_enemigo,
x_enemigo, y_enemigo);
 

blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);

                                    clear(buffer); //LIMPIO EL BUFFER

                                                        }

                                                   }

                           }
return 0;
                                                                }

MOVETE_NAVE (BITMAP *buffer, BITMAP *imagen_nave) {

int y_nave = 650;
int x_nave = 500;

  while (!key[KEY_ESC]) {

       if (key[KEY_LEFT] && x_nave > 20) x_nave=x_nave-20; //a la izquierda
 

       if (key[KEY_RIGHT] && (x_nave < 915)) x_nave=x_nave+20; // a la derecha

       draw_sprite (buffer, imagen_nave, x_nave, y_nave);

       blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);

       clear(buffer); //LIMPIO EL BUFFER

                        }
        return 0;
                                                  }

- --
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.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iEYEARECAAYFAj1+EVAACgkQrroPxW8f2D58LQCfSTXT5SAzu6y9rlBXvzHqTVTw
ZCkAoKAvEcvZqlKlMw0cMuhk/UrzSEsH
=CmkH
-----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/).
 



Do, 22 de Sep, 2002 9:47 pm

p0tsas
Sin conexión Sin conexión
Enviar mensaje Enviar mensaje

Reenviar Mensaje #763 de 9896 |
Desplegar mensajes Autor Ordenar por fecha

Los errores son muchos. En principio el programa está bastante mal estructurado. Pero vamos por parte. Para que funcione lo que has hecho y aparezcan las dos...
JD
macrojd
Sin conexión Enviar mensaje
22 de Sep, 2002
9:31 pm

Wenas, el problema q tienes es q no tienes un bucle en el q las dos funciones q utilizas se esten ejecutando hasta q se pulse la tecla escape (parece q quieres...
aae@...
p0tsas
Sin conexión Enviar mensaje
22 de Sep, 2002
9:43 pm
Avanzado

Copyright © 2009 Yahoo! Todos los derechos reservados.
Política de Privacidad Actualizada - Condiciones del servicio - Directrices - Ayuda