Programación Específica > Allegro
Mover Un Bitmap
(1/1)
seov:
Hola a todos!!!! :P
tengo un problemilla.........o mejor una duda ya que no se hacerlo.jijijij :huh:
El problemas es que estoy haciendo un juego en el que hay una tabla, una pelota y unos ladrillo.....se supone que la pelota deberia moverse por la ventana y rebotar con los bordes de la ventana y si choca con la tabla que es la que mueve el jugador podemos dirigir la pelota......el problema me viene cuando quiero animar la pelota.....no se como hacerlo........y no se como hacerlo para que se vea como que rebota........estoy trabajando con detección de colisiones rectangulares si me pueden ayudar a mover la pelota se los agradeceria......aca va lo que yo pensaba que podia mover la pelota :P ....
--- Código: Text --- #include <allegro.h> void init();void deinit(); int main(){ init(); BITMAP *pelota; BITMAP *bufer; PALETTE paleta; int x_anterior; int y_anterior; int x,y,sel; int guar_x; int guar_y; pelota=load_bitmap("pelota.bmp",paleta); pelota=load_bitmap("pelota.bmp",paleta); set_palette(paleta); if(pelota==NULL) deinit(); bufer=create_bitmap(pelota->w,pelota->h); clear(bufer); if(bufer==NULL) deinit(); x=SCREEN_W/2; y=SCREEN_H/2; while (!key[KEY_ESC]) { if(x>guar_x) { guar_x=x; x++; } if(x<guar_x) { guar_x=x; x--; } if(y<guar_y) { guar_y=y; y--; } if(y>guar_y) { guar_y=y; y++; } if(x>=SCREEN_W-pelota->w) x--; else if(x<=0) x++; else if(y>=SCREEN_H-pelota->h) y--; else if(y<=0) y++; else { x--; y++; } blit(bufer,screen,0,0,x_anterior,y_anterior,bufer->w,bufer->h); blit(screen,bufer,x,y,0,0,bufer->w,bufer->h); draw_sprite(screen,pelota,x,y); vsync();//espera a que se muestre toda la imagen en pantalla //para escribir la otra x_anterior=x; y_anterior=y; } deinit(); return 0;}END_OF_MAIN(); void deinit() { clear_keybuf(); /* añadir otras desintalaciones */ allegro_exit();} 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, 320, 400, 0, 0); if (res != 0) { allegro_message(allegro_error); exit(-1); } install_keyboard();}
seov:
jajajajaja :D
amigos no se preocupen .............ya encontre la forma en que se hacia .........jiiii........es más sencillo de lo que yo me imaginaba........jajajaaja B)
les dejo el codigo por si a alguien le sirve..........chauuuuuuu.....
/*hace rebotar una pelota por una ventana*/
#include <allegro.h>
void init();
void deinit();
int main()
{
init();
BITMAP *pelota;
BITMAP *bufer;
PALETTE paleta;
int x_anterior;
int y_anterior;
int x,y,sel;
int guar_x;
int guar_y;
pelota=load_bitmap("pelota.bmp",paleta);
pelota=load_bitmap("pelota.bmp",paleta);
set_palette(paleta);
if(pelota==NULL)
deinit();
bufer=create_bitmap(pelota->w,pelota->h);
clear(bufer);
if(bufer==NULL)
deinit();
x=SCREEN_W/2;
y=SCREEN_H/2;
guar_x=SCREEN_W/2-1;
guar_y=SCREEN_W/2+1;
while (!key[KEY_ESC])
{
if(x>guar_x)
{
guar_x=x;
if(x>=SCREEN_W-pelota->w)
x--;
else
x++;
}
if(x<guar_x)
{
guar_x=x;
if(x<=SCREEN_W-SCREEN_W)
x++;
else
x--;
}
if(y<guar_y)
{
guar_y=y;
if(y<=0)
y++;
else
y--;
}
if(y>guar_y)
{
guar_y=y;
if(y>=SCREEN_H-pelota->h)
y--;
else
y++;
}
blit(bufer,screen,0,0,x_anterior,y_anterior,bufer->w,bufer->h);
blit(screen,bufer,x,y,0,0,bufer->w,bufer->h);
draw_sprite(screen,pelota,x,y);
vsync();//espera a que se muestre toda la imagen en pantalla
//para escribir la otra
x_anterior=x;
y_anterior=y;
}
deinit();
return 0;
}END_OF_MAIN();
void deinit()
{
clear_keybuf();
/* añadir otras desintalaciones */
allegro_exit();
}
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, 320, 400, 0, 0);
if (res != 0)
{
allegro_message(allegro_error);
exit(-1);
}
install_keyboard();
}
Navegación
Ir a la versión completa