Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ankora45 en 20 Julio 2013, 10:17 am



Título: ¿Puedo hacer esto?
Publicado por: ankora45 en 20 Julio 2013, 10:17 am
Hola de nuevo. Veran
[spoiler]
Código
  1. #include <allegro.h>
  2.  
  3. int main()
  4. {
  5.    allegro_init();
  6.    install_mouse();
  7.    install_keyboard();
  8.    set_color_depth(32);
  9.    set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0);
  10.  
  11.    BITMAP *buffer = create_bitmap(640, 480);
  12.    BITMAP *FONDO = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/FONDO.bmp", NULL);
  13.    BITMAP *FONDO1 = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/FONDO1.bmp", NULL);
  14.    BITMAP *FONDO2 = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/FONDO2.bmp", NULL);
  15.    BITMAP *cursor = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/cursor3.bmp", NULL);
  16.    SAMPLE *musica;
  17.  
  18.    if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) { allegro_message("Error: inicializando sistema de sonido\n%s\n", allegro_error); return 1; }
  19.    set_volume(100, 100);
  20.    musica = load_sample("C://users/alvaro/Desktop/menu/menu/menu/audio/musica.wav");
  21.    play_sample(musica,200,150,1000,0);
  22.  
  23.  
  24.    bool salida = false;
  25.    while(!salida)
  26.        {
  27.           if(mouse_x > 13 && mouse_x < 345 &&
  28.              mouse_y > 287 && mouse_y < 342)
  29.              {
  30.                  blit(FONDO1,buffer,0,0,0,0,640,480);
  31.                  if(mouse_b & 1)
  32.                  {
  33.                     salida = true; // como podria poner ahi que se imprimiera sobre la pantalla una nueva iagen, otro menu.
  34.                  }
  35.              }
  36.            else if(mouse_x > 19 && mouse_x < 231 &&
  37.              mouse_y > 391 && mouse_y < 463 )
  38.              {
  39.                  blit(FONDO2,buffer,0,0,0,0,640,480);
  40.                  if(mouse_b & 1)
  41.                  {
  42.                      salida = true;
  43.                  }
  44.              }
  45.            else blit(FONDO,buffer,0,0,0,0,640,480);
  46.            masked_blit(cursor,buffer,0,0,mouse_x,mouse_y,40,34);
  47.            blit(buffer,screen,0,0,0,0,640,480);
  48.        }
  49.  
  50.    destroy_bitmap(buffer);
  51.  
  52.    return 0;
  53. }
  54. END_OF_MAIN();
  55.  
[/spoiler]

la duda es que he intentado imprimir otra imagen cuando se pulsa click derecho sobre unas coordenadas dadas en el area de un rectangulo sin embargo me tira un error. en el codigo de arriba no he puesto la imagen y va bien y en este:

[spoiler]
Código
  1. #include <allegro.h>
  2.  
  3. int main()
  4. {
  5.    allegro_init();
  6.    install_mouse();
  7.    install_keyboard();
  8.    set_color_depth(32);
  9.    set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0);
  10.  
  11.    BITMAP *buffer = create_bitmap(640, 480);
  12.    BITMAP *FONDO = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/FONDO.bmp", NULL);
  13.    BITMAP *FONDO1 = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/FONDO1.bmp", NULL);
  14.    BITMAP *FONDO2 = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/FONDO2.bmp", NULL);
  15.    BITMAP *cursor = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/cursor3.bmp", NULL);
  16.    BITMAP *comenzar = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/comenzar.bmp", NULL);
  17.    BITMAP *comenzar1 = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/comenzar1.bmp", NULL);
  18.    BITMAP *comenzar2 = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/comenzar2.bmp", NULL);
  19.    BITMAP *comenzar3 = load_bitmap("C://users/alvaro/Desktop/menu/menu/menu/imagenes/comenzar3.bmp", NULL);
  20.    SAMPLE *musica;
  21.  
  22.    if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) { allegro_message("Error: inicializando sistema de sonido\n%s\n", allegro_error); return 1; }
  23.    set_volume(100, 100);
  24.    musica = load_sample("C://users/alvaro/Desktop/menu/menu/menu/audio/musica.wav");
  25.    play_sample(musica,200,150,1000,0);
  26.  
  27.  
  28.    bool salida = false;
  29.    while(!salida)
  30.        {
  31.           if(mouse_x > 13 && mouse_x < 345 &&
  32.              mouse_y > 287 && mouse_y < 342)
  33.              {
  34.                  blit(FONDO1,buffer,0,0,0,0,640,480);
  35.                  if(mouse_b & 1)
  36.                  {
  37.                      if(mouse_x > 9 && mouse_x < 222 &&
  38.                      mouse_y > 365 && mouse_y < 442 )
  39.                      {
  40.                          blit(comenzar1,buffer,0,0,0,0,640,480);
  41.                          if(mouse_b & 1)
  42.                          {
  43.                              salida = true;
  44.                          }
  45.                      }
  46.  
  47.                      else if(mouse_x > 294 && mouse_x < 627 &&
  48.                      mouse_y > 372 && mouse_y < 435 )
  49.                      {
  50.                          blit(comenzar2,buffer,0,0,0,0,640,480);
  51.                          if(mouse_b & 1)
  52.                          {
  53.                              salida = true;
  54.                          }
  55.                      }
  56.  
  57.                      else if(mouse_x > 376 && mouse_x < 514 &&
  58.                      mouse_y > 31 && mouse_y < 90 )
  59.                      {
  60.                          blit(comenzar3,buffer,0,0,0,0,640,480);
  61.                          if(mouse_b & 1)
  62.                          {
  63.                              salida = true;
  64.                          }
  65.                      }
  66.  
  67.                      else blit(comenzar,buffer,0,0,0,0,640,480);
  68.                  }
  69.              }
  70.            else if(mouse_x > 19 && mouse_x < 231 &&
  71.              mouse_y > 391 && mouse_y < 463 )
  72.              {
  73.                  blit(FONDO2,buffer,0,0,0,0,640,480);
  74.                  if(mouse_b & 1)
  75.                  {
  76.                      salida = true;
  77.                  }
  78.              }
  79.            else blit(FONDO,buffer,0,0,0,0,640,480);
  80.            masked_blit(cursor,buffer,0,0,mouse_x,mouse_y,40,34);
  81.            blit(buffer,screen,0,0,0,0,640,480);
  82.        }
  83.  
  84.    destroy_bitmap(buffer);
  85.  
  86.    return 0;
  87. }
  88. END_OF_MAIN();
  89.  
[/spoiler]

he intentado crear otro menu al darle click en las coordenadas dadas de comenzar pero no funciona. creo que la he liado mucho ahi jaja me lie hasta yo :P si alguien sabe como puedo hacerlo o alguna funcion para hacerlo que me lo diga. Gracias


Título: Re: ¿Puedo hacer esto?
Publicado por: amchacon en 20 Julio 2013, 12:25 pm
El boton derecho se hace con mouse_b & 2. Ademas tienes que poner un descanso en el bucle rest(100).

Aparte de eso, que error te da.


Título: Re: ¿Puedo hacer esto?
Publicado por: ankora45 en 20 Julio 2013, 13:03 pm
Gracias por contestar, el error que me da es el siguiente:

this aplication has requested the runtime to terminate it in an unusual way


Título: Re: ¿Puedo hacer esto?
Publicado por: amchacon en 20 Julio 2013, 21:11 pm
Ah que es un error de ejecución... Pues entonces, comprueba si estan todas las imagenes.

Por cierto, no tienes que poner la ruta entera (tampoco es recomendable). Si la imagen está en la misma carpeta que el ejecutable te basta con poner el nombre:

Código
  1. FONDO = load_bitmap("FONDO.bmp", NULL);

Si está en una subcarpeta, puedes hacerlo asi:

Código
  1. FONDO = load_bitmap("./imagenes/FONDO.bmp", NULL);


Título: Re: ¿Puedo hacer esto?
Publicado por: ankora45 en 22 Julio 2013, 16:01 pm
Aver, sigue sin ir, lo unico que quiero es que cuando pulse sobre comenzar se dirija hacia otra imagen y deje de mostrarse esa, pero me da error. he intentado borrar el buffer pero tampoco funciona


Título: Re: ¿Puedo hacer esto?
Publicado por: amchacon en 22 Julio 2013, 16:08 pm
Aver, sigue sin ir, lo unico que quiero es que cuando pulse sobre comenzar se dirija hacia otra imagen y deje de mostrarse esa, pero me da error. he intentado borrar el buffer pero tampoco funciona
Repito, comprueba los punteros:

Código
  1. if (!FONDO){ allegro_message("Error al cargar el fondo"); exit(1); }


Título: Re: ¿Puedo hacer esto?
Publicado por: ankora45 en 22 Julio 2013, 16:59 pm
efectivamente, error al cargar el fondo. ¿que puedo hacer?


Título: Re: ¿Puedo hacer esto?
Publicado por: Shout en 23 Julio 2013, 12:44 pm
Comprueba si tu programa tiene permisos para acceder al archivo.
También tienes que estar seguro de que existe