Autor Tema: Es posible volver a colorear un map a transparente) (16bits/pixtudio)  (Leído 790 veces)

logotytye

  • Newbie
  • *
  • Mensajes: 19
  • Karma: 0
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

  • Hero Member
  • *****
  • Mensajes: 12873
  • Karma: 377
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #1 en: Abril 12, 2019, 05:56:18 pm »
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

  • Newbie
  • *
  • Mensajes: 19
  • Karma: 0
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #2 en: Abril 12, 2019, 11:14:22 pm »
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.
« última modificación: Abril 13, 2019, 12:26:13 am por logotytye »

logotytye

  • Newbie
  • *
  • Mensajes: 19
  • Karma: 0
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #3 en: Abril 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.

Arcontus

  • Sr. Member
  • ****
  • Mensajes: 351
  • Karma: 13
    • 5Leaps
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #4 en: Abril 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.
5Leaps, el primer juego comercial desarrollado para BennuGD. http://www.5leaps.com

logotytye

  • Newbie
  • *
  • Mensajes: 19
  • Karma: 0
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #5 en: Abril 17, 2019, 04:29:13 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

  • Hero Member
  • *****
  • Mensajes: 12873
  • Karma: 377
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #6 en: Abril 22, 2019, 01:18:35 pm »
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

  • Hero Member
  • *****
  • Mensajes: 12873
  • Karma: 377
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #7 en: Abril 22, 2019, 01:19:00 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

  • Hero Member
  • *****
  • Mensajes: 12873
  • Karma: 377
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #8 en: Abril 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...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

logotytye

  • Newbie
  • *
  • Mensajes: 19
  • Karma: 0
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #9 en: Abril 23, 2019, 12:33:19 am »
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

  • Hero Member
  • *****
  • Mensajes: 12873
  • Karma: 377
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #10 en: Abril 23, 2019, 05:25:27 pm »
de nada
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

  • Hero Member
  • *****
  • Mensajes: 6329
  • Karma: 162
  • Odio el periodo "entre proyectos"
    • La web de Drumpi
Re:Es posible volver a colorear un map a transparente) (16bits/pixtudio)
« Respuesta #11 en: Junio 10, 2019, 11:58:56 am »
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)