Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Comandante on March 04, 2015, 04:18:09 PM

Title: Exactitud con durezas
Post by: Comandante on March 04, 2015, 04:18:09 PM
Hola,

Vereis,he quitado las telarañas a mi carpeta de bennu y estoy probando a hacer algo de plataformas.
El caso es,que recuerdo que en su dia en mis castlevanias etc logré con div hacer plataformas "pixel perfect",es decir,la dureza era una linea de un pixel y los pies del personaje siempre quedaban un pixel por encima del suelo.
El problema que me encuentro ahora y no se como solucioné en su momento es,que cuando salto,al incrementar el avance de y para simular una caida con gravedad,puede llegar a caer de 4 en 4 pixeles,entonces,la y del personaje,y la y de la linea de la dureza no se "encuentran",provocando que el personaje caiga al vacio.Y si hago un cuadrado enorme en lugar de una linea no cae al vacio,pero no queda pixel perfect,es decir,a veces cae mas abajo que otras,etc.
Tengo una variable en_suelo,que cuando no esta tocando suelo es false y si toca es true para controlar saltos etc.Y lo tengo asi

if(map_get_pixel(0,png_durezas,x,y)==rgb(255,0,0))
   en_suelo=true;
else
  en_suelo=false;
end

El punto de control del personaje esta en sus pies.
¿Hay alguna forma de comprobar los pixeles de las durezas en un "radio" o algo por el estilo?
El caso es que en su momento lo logré :o
Title: Re:Exactitud con durezas
Post by: Yawin on March 04, 2015, 04:32:22 PM
Yo lo que hago es, con un bucle for comprobar que todos los pixeles por los que pasa en su caída no tienen esa dureza. O sea, si en un frame cae 4 píxeles, este for tiene 4 iteraciones.
Title: Re:Exactitud con durezas
Post by: gecko on March 04, 2015, 05:05:07 PM
Claro, es como dice Yawin. En lugar de comprobar durezas directamente en la posicion final, chequea desde la posicion actual hasta la final, pasando por cada una de las posibles. Y apenas se encuentre suelo, esa es la nueva posicion final.
Title: Re:Exactitud con durezas
Post by: Futu-block on March 04, 2015, 06:09:28 PM
en parte y lo ideal  (aunque no se lo productivo que puede ser) es usar varias comprobaciones de durezas siempre que se avance ''a trompicones'', me explico:

Supongamos que la gravedad es 4, osea que cuando cae avanza 4 (y = y+4;) hay que hacer 4 comprobaciones para el pixel perfect (o mas)

quedando mas o meno el codigo asi: (suponemos que el punto decontacto del esprite es x,y)

if (map_get_pixel (0,png_durezas,x,y) == rgb(255,0,0))
   en_suelo=true;
else
    if (map_get_pixel (0,png_durezas,x,y-1) == rgb(255,0,0))
       en_suelo=true;
    else
        if (map_get_pixel (0,png_durezas,x,y-2) == rgb(255,0,0))
           en_suelo=true;
        else
            if (map_get_pixel (0,png_durezas,x,y-1) == rgb(255,0,0))
                en_suelo=true;
            else
                en_suelo=false;
            end
         end
     end
end

evidenemente este codigo a parte de ser un ''cognazo'' hay que comprobarlo y recomprobarlo, je je
Title: Re:Exactitud con durezas
Post by: Yawin on March 04, 2015, 06:18:45 PM
¡Pero es mucho mejor un bucle!

for(i=y;y<i+velocidad;y++)
   if (map_get_pixel (0,png_durezas,x,y) == rgb(255,0,0))
      en_suelo=true;
   end
end
Title: Re:Exactitud con durezas
Post by: Futu-block on March 04, 2015, 09:43:11 PM
Vale, lo entiendo a la perfeccion y ese codigo se puede optimizar incluso con un bloque FOR como ha puesto yawin, solo para ahorrarte un tocho de codigo innecesario que no te va a relantizar en juego de una manera barbara, a menos que uses un ordenador antiguo o asi
Title: Re:Exactitud con durezas
Post by: gecko on March 05, 2015, 03:57:37 PM
Cuando pruebes el juego hacelo mostrando en la pantalla directamente el mapa de durezas, asi vas a ver que es lo que está dibujando la plataforma. (usar como mapa de pantalla el mapa de durezas, no se si me explico)

Me suenta a que no se está dibujando o moviendo la dureza correctamente. Y de esta forma lo vas a poder ver facilmente
Title: Re:Exactitud con durezas
Post by: Futu-block on March 05, 2015, 06:20:05 PM
No te rayes, una plataforma movil es un proceso mas, usa colision y roba las x,y a ese proceso y añadele medio cuerpo...
No se si me he explicao bien