¿Como Mover Objetos Con El Mouse (allegro en codeblocks)?

Iniciado por MaUrOx970909, 25 Octubre 2017, 08:49 AM

0 Miembros y 1 Visitante están viendo este tema.

MaUrOx970909

Como Lo Dice La Pregunta Quisiera Saber Si Alguien Me Podria Ayudar Orientandome De Como Arrastrar Objetos Con El Mouse En Un Aplicacion Grafica Con Allegro En Codeblocks.

Para Ser Un Poco Mas Especifico Necesito Crear El Juego De Las Torres De Hanoi Y No Se Como Mover Objetos Con El Mouse.

O Si Alguien Me Puede Facilitar Un Codigo Para Guiarme Se Lo Agradeceria Mucho.

Muchas Gracias De Antemano...

Maurice_Lupin

Hola MaUrOx970909, hace años que no programo con allegro, si mal no lo recuerdo la librería Allegro trae ejemplos para lo que buscas.

En mis archivos encontré un ejm que mueve una imagen de un roedor en la posición del mouse.
Recuerdo que me basé en los ejemplos de la librería y que funcionaba bien, a simple viste parece que hay cosas innecesarias.

Utilizo la técnica del doble buffer, es decir primero pintas en un bitmap el fondo y la rata, luego pintas el bitmap en pantalla; esto evita que veamos un feo parpadeo los humanos las ratas no sé  :xD

Acerca de lo que intentas te faltaría la interacción del mouse sobre objetos. Este código es antiguo pero una buena base, a lo mejor tendrás que reemplazar algunas funciones.

Código (cpp) [Seleccionar]

#include<allegro.h>
#include<iostream>
using namespace std;

char buf[256];
BITMAP *background;
BITMAP *sprite;
BITMAP *buffer;
BITMAP *alpha;

int main(int argc, char *argv[]) {
int x, y, c, a1,a2,a3;

if (allegro_init() != 0) return 1;
install_keyboard();
install_timer();
install_mouse();   
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
set_window_title( "Rata voladora" );

/* cargando imagen de fondo */
replace_filename(buf, argv[0], "fondo.bmp", sizeof(buf));
background = load_bitmap(buf, NULL);
if (!background) {
     set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
     allegro_message("Error reading %s!\n", buf);
     return 1;
}
   
PALETTE paleta;
replace_filename(buf, argv[0], "rata.pcx", sizeof(buf));
alpha = load_bitmap(buf, paleta);
if (!alpha) {
    set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
    allegro_message("Error reading %s!\n", buf);
    return 1;
}
 
set_palette(paleta);
   
sprite = create_bitmap(alpha->w, alpha->h);

buffer = create_bitmap(SCREEN_W, SCREEN_H);

/* scale the background image to be the same size as the screen */
stretch_blit(background, buffer, 0, 0, background->w, background->h,
0, 0, SCREEN_W, SCREEN_H);


destroy_bitmap(background);
background = create_bitmap(SCREEN_W, SCREEN_H);
blit(buffer, background, 0, 0, 0, 0, SCREEN_W, SCREEN_H);

while (!keypressed()) { // sale del juego cuando presionas un tecla
    x = mouse_x - sprite->w/2;
    y = mouse_y - sprite->h/2; 
    draw_sprite(buffer, background, 0,0); // dibuja el fondo
    draw_sprite(buffer, alpha, x,y); // dibuja la rata en la posicion del mouse
    vsync();
    blit(buffer, screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H); // vuelca el buffer en pantalla
}
readkey();
//
destroy_bitmap(alpha);
destroy_bitmap(background);
destroy_bitmap(sprite);
allegro_exit();
return 0;
}
END_OF_MAIN();
Un error se comete al equivocarse.