Es posible volver a colorear un map a transparente) (16bits/pixtudio)

Started by logotytye, April 11, 2019, 04:23:37 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

logotytye

GRAFICOS DE 16 BITS / PIXTUDIO. En una parte del juego que estoy haciendo tengo que hacerle un "hueco al piso" al scroll y poder ver a través de este hueco el background del scroll, ese que se mueve atrás lentamente, el mapa visible lo creo con new_map y le pintando con tiles con la funcion map_xputnp, pero he intentado volver a colocar otra vez el color transparente y no he podido actualizarlo, pareciera queme aceptara solo colores sólidos. como es posible volver a pintar una zona de un gran mapa de nuevo con color transparente (como si se hubiera creado el mapa vacio)?

SplinterGU

comparti el codigo de ejemplo... pero llenando con 0 deberia hacer transparente el color...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

logotytye

Gracias Splinter, rellené con 0 pixel a pixel usando map_put_pixel() con ultimo parámetro de 0. como comentaste y funcionó, se vuelve  a ver el background, lo que no entiendo es por que al intentar obtener el número del color de esa región recién parcheada me retorna: 65024  y no 0?? (parece que el número cambia según el color del que estaba pintado el pedazo que se cambió, para rgb(0, 255, 0) da este numero y para  rgb(255, 255, 0) da 16711168)  al parchear el mapa de durezas también me retorna ese número por lo tanto según la programación del juego cualquier cosa que no sea 0 es un muro.

Este es el pedazo que parchea para que se pueda ver el fondo, el anchocasilla y altocasilla es de 32, casillax y casillay es la ubicacion del tile, por eso se hace la conversion a coordenadas de pixel dentro de la funcion map_put_pixel.

for(i=0; i<anchocasilla; i++)
         for(j=0; j<altocasilla; j++)
            map_put_pixel(0, map, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, 0);     //grafico visible
            map_put_pixel(0, mapd, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, 0);   //grafico de durezas
         end
      end
      say("mapgetpixel: "+map_get_pixel(0, map, (casillax*anchocasilla-anchocasilla)+15, (casillay*altocasilla-altocasilla)+16));  //me ubico en el medio del pedazo parchado (hueco para ver el fondo) y me retorna 65024


inicialmente lo que estaba intentando era rellenar con un mapa recién creado y "en blanco" usando la funcion map_xput() pero de esta forma por lo visto no era el método correcto para esto.

logotytye

He encontrado la solución, primero pinto ambos mapas el de durezas y el visible con rgb y luego con el simple 0, así finalmente me retorna el 0 (notese el último parametro de map_put_pixel.

map_put_pixel(0, map, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, rgb(0,0,0));
map_put_pixel(0, mapd, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, rgb(0,0,0));
map_put_pixel(0, map, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, 0);
map_put_pixel(0, mapd, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, 0);

Aún así me quedo la duda de por que no retornaba 0 al colocar directamente el 0 si no, otros números.

Arcontus

Creo que te pasó algo similar a mi: https://forum.bennugd.org/index.php/topic,4641.0.html
Aun que el tema inicial no es el mismo, si te fijas lo que pretendo hacer es un circulo con una sección transparente y baja el rendimiento según como lo hagas. La respuestá la da Splinter un poco más abajo.
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

logotytye

Quote from: Arcontus on April 16, 2019, 06:29:37 PM
Creo que te pasó algo similar a mi: https://forum.bennugd.org/index.php/topic,4641.0.html
Aun que el tema inicial no es el mismo, si te fijas lo que pretendo hacer es un circulo con una sección transparente y baja el rendimiento según como lo hagas. La respuestá la da Splinter un poco más abajo.

Así es, estoy seguro que lei tu tema hace un tiempo, y por lo visto es el mismo funcionamiento interno y por eso hay que aplicar dos funciones para obtener el resultado, quizás se pueda documentar como una nota de cada función a la que afecte esto en la wiki, ya que varias personas nos quedamos un par de días por lo menos tratando de resolver el misterio.

SplinterGU

Quote from: logotytye on April 13, 2019, 01:35:38 AM
He encontrado la solución, primero pinto ambos mapas el de durezas y el visible con rgb y luego con el simple 0, así finalmente me retorna el 0 (notese el último parametro de map_put_pixel.

map_put_pixel(0, map, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, rgb(0,0,0));
map_put_pixel(0, mapd, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, rgb(0,0,0));
map_put_pixel(0, map, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, 0);
map_put_pixel(0, mapd, (casillax*anchocasilla-anchocasilla)+i, (casillay*altocasilla-altocasilla)+j, 0);

Aún así me quedo la duda de por que no retornaba 0 al colocar directamente el 0 si no, otros números.

si estas en 32bits, rgb va a llenar el componente alpha con 255 o algun otro valor, para que quede transparente tenes que usar 0 absoluto... o usar rgba(0,0,0,0)... si el numero que te da es mayor a 65535 es porque esta asignando a la compomente alpha un valor diferente de 0... para que no colisione lo que necesitas es un alpha de 0 (ademas de los pixels a 0)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

Quote from: Arcontus on April 16, 2019, 06:29:37 PM
Creo que te pasó algo similar a mi: https://forum.bennugd.org/index.php/topic,4641.0.html
Aun que el tema inicial no es el mismo, si te fijas lo que pretendo hacer es un circulo con una sección transparente y baja el rendimiento según como lo hagas. La respuestá la da Splinter un poco más abajo.


si mal no recuerdo es un caso diferente, en ese caso eran primitivas graficas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

igual me olvide decir, que pixtudio es 32bits, por mas que tus graficos sean 16bits, convierte a 32bits... por eso no olvides la componente alpha de cada pixel...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

logotytye

Quote from: SplinterGU on April 22, 2019, 01:21:48 PM
igual me olvide decir, que pixtudio es 32bits, por mas que tus graficos sean 16bits, convierte a 32bits... por eso no olvides la componente alpha de cada pixel...

Aclarado sr Splinter, no había caído en cuenta de eso, ahora todo tiene sentido, muchas gracias

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Ya sé que esto tiene tiempo, y me parece raro que no se haya dicho, pero si vas a usar MAP_XPUTNP, hay mucha gente que se olvida de añadir el flag 128 (NO_COLOR_KEY) para que se pinten los pixels transparentes. Si no se añade, se ignoran a la hora de pintar gráfico sobre gráfico.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)