Programación Específica > Allegro

 Metodos de dibujo

(1/1)

JorgedeOz:
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 ---#include <allegro.h>#include <iostream>#include <stdlib.h>#include <time.h> typedef struct bitmap{        int h,w;};void init();void deinit();BITMAP* buffer;BITMAP* buffer2;BITMAP* espacio;BITMAP* nave_up;BITMAP* rayo;double x,y,x_anterior,y_anterior;float x1,y1;int main(){    init(); while (!key[KEY_ESC])   {       x1=x+nave_up->w/2;       y1=y+nave_up->h-100;       x_anterior=x; y_anterior=y;        /* put your code here */        clear_bitmap(buffer);        draw_sprite(buffer,espacio,0,0);      rectfill(buffer,200,5,400,50,makecol(23,34,54));      draw_sprite(buffer,nave_up,x,y);      if(key[KEY_DOWN])         y+=2;      if(key[KEY_UP])         y-=2;      if(key[KEY_RIGHT])         x+=2;      if(key[KEY_LEFT])         x-=2;      if(x>SCREEN_W-nave_up->w)          x=x_anterior;      if(x<0)          x=x_anterior;      if(y>SCREEN_H-nave_up->h)          y=y_anterior;      if(y<0)          y=y_anterior;      if(key[KEY_SPACE])      {          for(y1=y+nave_up->h-100; y1>0; y1=y1-4)          {          draw_sprite(buffer,espacio,0,0);          rectfill(buffer,200,5,400,50,makecol(23,34,54));          draw_sprite(buffer,nave_up,x,y);          textout(buffer,font,"Mi primer juego",240,20,makecol(255,255,255));          blit(buffer,buffer2,0,0,0,0,SCREEN_W,SCREEN_H);          draw_sprite(buffer2,rayo,x1,y1);          circlefill(buffer2,x1,y1,5,255);          textprintf_centre(buffer2,font,60,0,makecol(255,255,255),"Rayo:%.2f",y1);             blit(buffer2,buffer,0,0,0,0,SCREEN_W,SCREEN_H);             blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);          }      }      text_mode(-1);      textout(buffer,font,"Mi primer juego",240,20,makecol(255,255,255));        blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);    }    deinit();   destroy_bitmap(buffer);   destroy_bitmap(espacio);   destroy_bitmap(nave_up);   destroy_bitmap(rayo);   destroy_bitmap(buffer2);    return 0;}END_OF_MAIN()void init(){    int depth, res;    allegro_init();    depth = desktop_color_depth();    if (depth == 0) depth = 32;    set_color_depth(depth);    res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);    if (res != 0)   {        allegro_message(allegro_error);        exit(-1);    }   buffer=create_bitmap(SCREEN_W,SCREEN_H);   buffer2=create_bitmap(buffer->w,buffer->h);    espacio=load_bitmap("espacio.bmp",0);   nave_up=load_bitmap("nave_up.tga",0);   rayo=load_bitmap("rayo.tga",0);    install_timer();    install_keyboard();    install_mouse();    /* add other initializations here */} void deinit(){    clear_keybuf();    /* add other deinitializations here */}  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:
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,

Navegación

[0] Índice de Mensajes

Ir a la versión completa