[ Dudas sobre el curso de programación de juegos ]

No carga la imagen Marciano1

09-Jun-2012 20:15
Roberto J.S
8 Respuestas

Buenas ante todo agradecerte el esfuerzo que supone el hacer este curso de forma altruista. La verdad es que en mi caso ha sido la chispa para volver a retomar la programación. Soy uno de tantos informáticos que por cosas del destino no ha podido dedicarse a la programación profesionalmente (aunque no puedo quejarme).
Estoy bastante oxidado, y probablemente algunas de las dudas sean bastante básicas pero en fin ahí va.

Estoy en la primera parte del Marciano y no consigo que me localice la imagen, al principio pensaba que era algún pequeño fallo en mi código (que es básicamente el del curso pero estructurado en funciones), así que para probar he copiado el código del curso punto por punto (de hecho es un copia/pega), y me sigue saliendo el mensaje de que "No se ha encontrado la imagen".
El archivo es el spr_inv.pcx, lo dejo en la misma carpeta del proyecto pero no lo localiza.
También he probado metiendo el path completo y sigue sin localizarlo.

Gracias por el curso.

Copio el código


#include <allegro.h>


/* --------------------------------------constantes globales-------------------------------------------------------*/

int const AnchPant = 320;
int const AltPant=200;
int const Retardo = 300;

/* --------------------------------------Variables globales-------------------------------------------------------*/

PALETTE Pal;
BITMAP *Imagen;
BITMAP *Nave;
BITMAP *Marciano1;
BITMAP *Marciano2;

/* --------------------------------------Inicializacion Funciones----------------------------------------------------*/

int Inicializa();
void DibujaNave();


/* --------------------------------------programa--------------------------------------------------------------------*/

int main()
{
 int Fotograma = 1;
 
 //* intentamos inicilizar si devuelve 0 es que no ha habido problemas
 
 if(Inicializa() !=0)
 {
   exit(1);
 }
 do
 {
   clear_bitmap(screen);        
   DibujaNave();
 }while(!keypressed());
   
  rest(Retardo);
   
 destroy_bitmap(Imagen);
 readkey();  
return 0;
}

/* ----------------------------------------------- Funciones----------------------------------------------------*/

//* Funcion de inicializacion

int Inicializa()
{
 allegro_init();
 install_keyboard();
 install_timer();
 
 if(set_gfx_mode(GFX_SAFE, AnchPant,AltPant,0,0) != 0)
 {
   set_gfx_mode(GFX_TEXT,0,0,0,0);
   allegro_message("Incapaz de entrar en modo grafico\n\n%s",allegro_error);
   return 1;
 }
 
 set_palette(Pal);
 Imagen = load_pcx("spr_inv.pcx", Pal);//* intentamos abrir la imagen y guardarla en imagen
 
 if(!Imagen)
 {
    set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
    allegro_message("No se ha encontrado la imagen\n");
    return 1;
 }
 
 //* Reservamos espacio para las otras imagenes
 
 Nave = create_bitmap(16,16);
 Marciano1=create_bitmap(16,16);
 Marciano2=create_bitmap(16,16);
 
 //* Cortamos la imagen grande para obtener las imagenes pequeñas
 
 blit(Imagen,Nave //* origen (imagen)  y destino (nave) de la imagen
 ,32,32 //* coordenadas de origen
 ,0,0 //* Posicion de destino en este caso 0,0 por que el destino es la variable nave
 ,16,16); //* Anchura y altura de la imagen (16 pixels * 16 pixels)
 
 blit(Imagen,Marciano1,0,32,0,0,16,16);
 blit(Imagen,Marciano2,16,32,0,0,16,16);
 
 return 0;
 
}
 
//* Funcion de dibujar nave

void DibujaNave()
{
 draw_sprite(screen, Imagen,120,80);
 draw_sprite(screen,Nave,70,150);
 
}

END_OF_MAIN();


10-Jun-2012 06:42
Nacho Cabanes (+84)

El fuente parece correcto, así que yo te diría que verifiques que la imagen también lo es: usa XnView o algún otro editor gráfico para asegurarte de que es una imagen PCX válida.


10-Jun-2012 14:34
Roberto J.S

Buff nada, he comprobado la imagen pcx con un editor y esta correcta, he probado a pasarla a bmp y en este caso si que la lee pero no muestra en pantalla los bitmaps (sale todo en negro). He estado bicheando por internet y he visto a otro con el mismo problema, pero no le han dado con la solución.
No se si sera la versión allegro que estoy usando (4.4.0.1).
Estoy por saltarme este juego pero no me gustaría por que el curso esta muy bien estructurado, ademas sospecho que me puedo volver a encontrar este problema.


10-Jun-2012 17:46
Jose Ontiveros Barrientos.

Bueno, a mi si me cargó, podrías poner tu código y de esa forma nos daríamos cuenta en que parte o partes del código se produce algún tipo de error, hay varias consideraciones a tomar en cuenta, una es que cargues correctamente la imagen,  al menos yo lo hago con load_bitmap("marciano.bmp,NULL) y la otra es que establezcas la profundidad de colores con set_color_depth.

Bueno esperamos tu código para resolver la duda, saludos.


10-Jun-2012 17:56
Jose Ontiveros Barrientos.

Mil disculpas, no había visto tu código, bueno a mi me pasó algo parecido, las recomendaciones que leí eran que omitiera la parte de el establecimiento de la paleta si no trabajaba con imágenes de 255 colores, así que no establecí la paleta y la deje así : load_bitmap("marciano.bmp",NULL)  inténtalo a ver que pasa, cualquier duda espero poder ayudarte, yo también ando iniciando con esto de la programación, saludos.


10-Jun-2012 20:48
Jose Ontiveros Barrientos.

Hola mira aquí hice este pequeño código para probar que si carga correctamente la imagen, lo único es que tienes que poner la imagen dentro de la misma carpeta donde tengas tu proyecto y checar que los nombres sean los mismos.


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

BITMAP *img;

int main()
{
     allegro_init();
     install_keyboard();
     install_timer();
     
     if(set_gfx_mode(GFX_SAFE,320,200,0,0)!=0)
     {
        set_gfx_mode(GFX_TEXT,0,0,0,0);                                      
        allegro_message("incapaz de entrar%s",allegro_error);
        return 1;
     }
     
     img=load_bitmap("marciano.bmp",NULL);
     
     draw_sprite(screen,img,100,100);
     
     readkey();
}
END_OF_MAIN();



suerte, espero haberte ayudado.


11-Jun-2012 11:27
Nacho Cabanes (+84)

Adjuntanos la imagen, por si el problema estuviera en ella. Por ejemplo, quizá no sea de 256 colores, sino que tenga una paleta optimizada.


11-Jun-2012 20:16
Roberto J.S

Por fin, muchas gracias a los dos. Jose gracias a tu programa me he dado cuenta de donde estaba el fallo (que eran dos ).
El primero efectivamente la imagen pcx aunque se podía visualizar con un editor no se por que pero no la reconocía el sistema como pcx, al final me he creado mi propio BITMAP con el aseprite. (que por cierto parece una chorradilla pero no veas si es difícil dibujar los numeritos y las letras, toda la tarde me he tirado).
El segundo fallo era que borraba el bitmap antes del readkey por eso veía la pantalla en negro.
Me habéis alegrado la tarde gracias. :-D


12-Jun-2012 15:35
Jose Ontiveros Barrientos.

Que gusto que te haya servido el código, y si, en verdad que es difícil dibujar o editar imágenes. Cuando tengas problemas semejantes trata de hacerte un fuente muy aparte del programa en el que trabajas, como en el caso que te he mostrado, esto te permite identificar muchos problemas que pudieran surgir a lo largo del desarrollo del programa. A mi me llevo varios días de investigación y andar de foro tras foro hasta resolver algunos inconvenientes que resultan y ni se diga el montón de fuentes que me he hecho para encontrar algún error, no soy experto, ni mucho menos he hecho alguna carrera en programación pero este pequeño tip a mi me ha ayudado bastante, así que es bastante recomendable que lo pongas en practica, suerte y si tienes alguna duda en la que pueda ayudarte no dudes en recurrir al foro. :D






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)