• Viernes 15 de Noviembre de 2024, 07:45

Autor Tema:  Metodos de dibujo  (Leído 2283 veces)

JorgedeOz

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Metodos de dibujo
« en: Domingo 27 de Julio de 2008, 04:15 »
0
que onda!!!
primero que nada pues soy nuevo aqui y tambien soy nuevo en esto de la programacion con allegro
y espero que me puedan ayudar un poco con un ejemplo de juego.
Es el juego de las navez, el fondo y las naves las agarre de un ejemplo de por aqui y quisiera saber si hay otro metodo de dibujar los disparos
bueno aqui esta el codigo
Código: Text
  1. #include <allegro.h>
  2. #include <iostream>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. typedef struct bitmap
  7. {
  8.         int h,w;
  9. };
  10. void init();
  11. void deinit();
  12. BITMAP* buffer;
  13. BITMAP* buffer2;
  14. BITMAP* espacio;
  15. BITMAP* nave_up;
  16. BITMAP* rayo;
  17. double x,y,x_anterior,y_anterior;
  18. float x1,y1;
  19. int main()
  20. {
  21.     init();
  22.  while (!key[KEY_ESC])
  23.    {
  24.        x1=x+nave_up->w/2;
  25.        y1=y+nave_up->h-100;
  26.        x_anterior=x; y_anterior=y;
  27.         /* put your code here */
  28.         clear_bitmap(buffer);
  29.         draw_sprite(buffer,espacio,0,0);
  30.       rectfill(buffer,200,5,400,50,makecol(23,34,54));
  31.       draw_sprite(buffer,nave_up,x,y);
  32.       if(key[KEY_DOWN])
  33.          y+=2;
  34.       if(key[KEY_UP])
  35.          y-=2;
  36.       if(key[KEY_RIGHT])
  37.          x+=2;
  38.       if(key[KEY_LEFT])
  39.          x-=2;
  40.       if(x>SCREEN_W-nave_up->w)
  41.           x=x_anterior;
  42.       if(x<0)
  43.           x=x_anterior;
  44.       if(y>SCREEN_H-nave_up->h)
  45.           y=y_anterior;
  46.       if(y<0)
  47.           y=y_anterior;
  48.       if(key[KEY_SPACE])
  49.       {
  50.           for(y1=y+nave_up->h-100; y1>0; y1=y1-4)
  51.           {
  52.           draw_sprite(buffer,espacio,0,0);
  53.           rectfill(buffer,200,5,400,50,makecol(23,34,54));
  54.           draw_sprite(buffer,nave_up,x,y);
  55.           textout(buffer,font,"Mi primer juego",240,20,makecol(255,255,255));
  56.           blit(buffer,buffer2,0,0,0,0,SCREEN_W,SCREEN_H);
  57.           draw_sprite(buffer2,rayo,x1,y1);
  58.           circlefill(buffer2,x1,y1,5,255);
  59.           textprintf_centre(buffer2,font,60,0,makecol(255,255,255),"Rayo:%.2f",y1);
  60.              blit(buffer2,buffer,0,0,0,0,SCREEN_W,SCREEN_H);
  61.              blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
  62.           }
  63.       }
  64.       text_mode(-1);
  65.       textout(buffer,font,"Mi primer juego",240,20,makecol(255,255,255));
  66.         blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
  67.     }
  68.     deinit();
  69.    destroy_bitmap(buffer);
  70.    destroy_bitmap(espacio);
  71.    destroy_bitmap(nave_up);
  72.    destroy_bitmap(rayo);
  73.    destroy_bitmap(buffer2);
  74.     return 0;
  75. }
  76. END_OF_MAIN()
  77. void init()
  78. {
  79.     int depth, res;
  80.     allegro_init();
  81.     depth = desktop_color_depth();
  82.     if (depth == 0) depth = 32;
  83.     set_color_depth(depth);
  84.     res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
  85.     if (res != 0)
  86.    {
  87.         allegro_message(allegro_error);
  88.         exit(-1);
  89.     }
  90.    buffer=create_bitmap(SCREEN_W,SCREEN_H);
  91.    buffer2=create_bitmap(buffer->w,buffer->h);
  92.     espacio=load_bitmap("espacio.bmp",0);
  93.    nave_up=load_bitmap("nave_up.tga",0);
  94.    rayo=load_bitmap("rayo.tga",0);
  95.     install_timer();
  96.     install_keyboard();
  97.     install_mouse();
  98.     /* add other initializations here */
  99. }
  100.  
  101. void deinit()
  102. {
  103.     clear_keybuf();
  104.     /* add other deinitializations here */
  105. }
  106.  
  107.  
el caso es que use 2 bitmaps para dibujar y al momento del disparo tengo que copiar el bitmap anterior y volver a dibujar todo y despues de nuevo volver a mandarlo al inicio y despues a pantalla emm ps creo que hay mejores metodos para hacer esto pero no se cuales xD  espero que me puedan ayudar saludos!!!!

BlackWind

  • Miembro activo
  • **
  • Mensajes: 89
    • Ver Perfil
Re: Metodos de dibujo
« Respuesta #1 en: Lunes 11 de Agosto de 2008, 04:26 »
0
Hola,
si nadamas usas allegro sin ninguna otra libreria (como opengl o direct3d). Esa es la mejor opcion. La tecnica se llama double buffering.

Por cierto, para futuras referencias, si sabes ingles, te recomiendo que mejor postees tus dudas en www.allegro.cc

saludos,