Mapas de durezas en 32 bits

Todo lo relacionado con el diseño de gráficos para videojuegos y en general.

Mapas de durezas en 32 bits

Postby SrHead » Sun Apr 12, 2009 8:56 am

Llevo dos días intentando crear un mapa de durezas en modo 32 bits sin poderlo conseguir. El mapa es un bmp capturado de otro juego. Cuando lo paso a 8 bits no tengo problemas, pero sin embargo en 32 bits, parece la información que obtengo con la función map_get_pixel no es la que se corresponde con el color que he elegido como dureza.
Esta es la linea de código: if (map_get_pixel(0,2,x,y+20) <> rgb(255,233,0)) y++; end.
La he probado creando yo el mapa en el paint con 4 colores y en este caso si funciona, sin embargo con la imagen capturada no. ¿estoy haciendo algo mal?.
Gracias y un saludo
User avatar
SrHead
 
Posts: 31
Joined: Sat Mar 14, 2009 9:12 pm

Re: Mapas de durezas en 32 bits

Postby CicTec » Sun Apr 12, 2009 9:40 am

Hola

El BMP que capturas esta en 8, 16 o 24bits ?, porque si esta en 8 o 16bits a hacer la conversion no tienes precision y por eso puede no corresponder, hago un ejemplo:

1 - tenemos un pixel en 16bits en el BMP que corresponde a 65536 (blanco puro en 16bits), los valores RGB de dicho color son: R = 31, G = 63, B = 31
al convertirlo en 32bits, se pondran en:
R(31 << 3) = 248, G(63 << 2) = 252, B(31 << 3) = 248
Asi que si intentas comparar el pixel con un blanco puro en 32bits (RGB(255, 255, 255)), claramente no corresponde por la perdida de precision.

En este caso lo que te recomiendo es:
- guardar o convertir el BMP a 24 bits, con cualquier programa de grafica, obtener los valores RGB de los pixels que necesitas para las colisiones
- convertir el BMP a MAP o ponerlo en un FPG (hace en automatico la conversion)
- y usar los valores obtenidos en el punto 1 para comprobarlos con MAP_GET_PIXEL
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Mapas de durezas en 32 bits

Postby SrHead » Sun Apr 12, 2009 10:10 am

La captura la hago en 24 Bits. Luego con el Photoshop dibujo sobre la misma el color que voy ha utilizar como dureza (por ejemplo 255,0,255) y vuelvo ha grabar el bmp en 24 bits.
Incluyo la imagen, tal como me dices en un fpg. Compilo y el prota empieza ha caer indefinidamente sin pararse en la dureza. He implementado un funcion write_in para ver el valor de map_get_pixel a medida que el prota va moviendose y los resultado como minimo son extraños. En sitios donde debería haber diferentes códigos por la cantidad de colores existentes en el mapa, el valor marca 0, en otros va cambiando rapidamente. cuando pasa por el color asignado a la dureza, marca 0. No entieno este comportamiento.

Sin embargo, si yo creo el grafico en 24 bits, no hay problema. Las durezas funcionan. ¿Tendra que con el programa de captura? Utilizo el HyperSnap 6, y como ya te he comentado, capturo en bmp 24 bits.
Gracias CicTec por tu rápida respuesta.

PD: he probado a pasar el mapa a escala de grises, y el problema continua.
User avatar
SrHead
 
Posts: 31
Joined: Sat Mar 14, 2009 9:12 pm

Re: Mapas de durezas en 32 bits

Postby CicTec » Sun Apr 12, 2009 10:15 am

mmmmm, es raro eso, haz otra prueba:
- carga el BMP capturado, con el programa de grafica editalo con los colores que necesitas, guarda el file en PNG (lo guarda a 32bits) y pon eso en el FPG, posiblemente con eso se soluciona, si continua fallando veremos otra solucion, pero lo veo algo raro.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Mapas de durezas en 32 bits

Postby SrHead » Sun Apr 12, 2009 7:27 pm

Nada sigo sin ver la luz. He probado lo que me has dicho y tampoco. He editado una nueva captura desde el paint, por si acaso era problema de Photoshop, y tampoco. Ya te digo, en principio la informacion que reporta map_get_pixel es erronea. si queires te subo las pruebas y el fpg, para que lo compruebes por ti mismo. Sigo investigando :(
User avatar
SrHead
 
Posts: 31
Joined: Sat Mar 14, 2009 9:12 pm

Re: Mapas de durezas en 32 bits

Postby CicTec » Sun Apr 12, 2009 7:30 pm

si, subela por favor, asi la probamos y te buscamos la solucion a tu problema :)
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Mapas de durezas en 32 bits

Postby SrHead » Sun Apr 12, 2009 8:08 pm

¿como puedo subirlo?
saludos
User avatar
SrHead
 
Posts: 31
Joined: Sat Mar 14, 2009 9:12 pm

Re: Mapas de durezas en 32 bits

Postby CicTec » Sun Apr 12, 2009 8:14 pm

es muy simple, cuando le das a responder, si miras abajo tienes un tab con 2 pestañas: opciones y Subir adjunto le das e ese ultimo y te pide el nombre del fichero, (con el boton por la derecha lo puedes coger da tu disco, luego le das "Agregar archivo" y te lo sube, una vez que ha completado te aparecen abajo 2 botones, le das a Insertar en texto y te lo pega en el mensaje
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: Mapas de durezas en 32 bits

Postby SrHead » Sun Apr 12, 2009 8:26 pm

Gracias CicTech. Aqui lo llevas. Espero tus noticias.
Saludos
Prueba gravedad.rar
You do not have the required permissions to view the files attached to this post.
User avatar
SrHead
 
Posts: 31
Joined: Sat Mar 14, 2009 9:12 pm

Re: Mapas de durezas en 32 bits

Postby CicTec » Sun Apr 12, 2009 9:06 pm

Ya veo, claro es un problema de calculo de posicion, tu usas una mapa de dureza de 640x480, mientra la pantalla esta en 800x600, como no haces nigun calculo para convertir en las coordenadas de pantalla, te encuentras con esos problemas, mira, cambia el PRG en ese modo:
Code: Select all
PROGRAM Gravedad;
PRIVATE
    figura;
BEGIN
   
    set_mode(640,480,32,mode_FULLSCREEN);          // Ajustamos el modo de pantalla 32 bits
    load_fpg ("prueba32.fpg");    // Cargamos los graficos 32 bits
    put_screen (0,106);           // Pintamos el fondo
    mouse.graph=5;
    write(0, 0, 0, 0, "FIGURA:");
    write_int(0, 42, 0, 0, offset figura);
   
    personaje(230,200);
    loop
        figura = map_get_pixel(0, 106, mouse.x, mouse.y);
        frame;
    end
END

//-----------------------------------------------------------------------------
//                  Proceso para el personaje principal
//-----------------------------------------------------------------------------

PROCESS personaje(x,y);
private
color;

BEGIN
graph=4;
    write_int(0,42,30,4,offset COLOR);
    LOOP
        color= map_get_pixel(0,106,x,y);
       
        if (color != rgb(255,0,255)) y++;  end

      frame;
    END
END

Ya veras que si funciona.

Un juego de ejemplo que puedes mirar para ver como hacer un juego de plataformas con durezas es el MALVADO.PRG, lo puedes encontrar bajandote el pack de Games & tutorials de DIV2 en la seccion novedades y releases.

Si necesitas otra ayuda pides sin problemas :)

Saludos y hasta pronto.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Next

Return to Gráficos

Who is online

Users browsing this forum: No registered users and 7 guests