Hola, tengo un problema:
Tengo un proceso prota (el protagonista del juego), y dentro de este proceso tengo escritas unas lineas que tienen por funcion detectar si el personaje está o no sobre el suelo. He puesto esto:
COLOR=MAP_GET_PIXEL(FILE,MAPPER,X,Y+30); //mapper seria el mapa que contiene las durezas
IF(COLOR<>RGB(255,0,0)) //si el color obtenido no es rojo...
Y+=2; //baja el proceso
END
Eso funciona perfectamente, pero cuando reemplazo el Y+=2 por Y+=30 para que baje mas rapido, me traspasa el suelo sin detectar nada...
Alguna manera de hacer que lo detecte igual o algun metodo mas eficaz para la deteccion de durezas?
Si el grosor de la dureza es menor que 30 píxeles siempre existe una probabilidad de que al hacer y+=30 pase de largo la dureza xD
El método de durezas que usas creo que es el de mi tutorial, es un método que funciona, pero no es el método que realmente habría que usar...
Si estás empezando simplemente haz las durezas "más gordas" y todo funcionará bien, en cambio, si ya sabes de programación piensa que el mejor método es hacer 30 comprobaciones de dureza, pixel a pixel, antes de avanzar esos 30 píxeles tan alegremente :P
Por supuesto también hay soluciones mejores, como el motor tileado de Drumpi, pero no he tenido ocasión de ponerlas en práctica.
Ánimo, las durezas son fáciles.
PD: A ver cuando saco un tiempo y subo el tema con la gravedad... Me temo que hasta 2010 no tengo tiempo ni para ir al baño a hacer aguas mayores si no es con el portátil encima y "currando" :(
Ojo, que el motor de scroll tileado sólo soluciona la parte gráfica del asunto, es decir, representar el scroll, el tema de las durezas sigue siendo trabajo del programador.
Si bien se simplifica el asunto porque un tile engloba 16x16 pixels o 32x32 pixels, no significa que sea sencillo... o si. Si sigues usando los colores de las durezas en los tiles, puedes usar el mismo método, pero si no quieres depender de ellos, la cosa se complica bastante.
De todas formas, el consejo para el problema actual es que antes de avanzar X tiles, debes asegurarte que todo el camino recorrido está libre. El interior de las cámaras acorazadas está libre y se puede estar, pero asegúrate antes de que la puerta esté abierta para poder pasar ;D
Mi cutre solution, ya que no soy un master, para hacer que el y=y+1 vaya mas rapido cambia el frame; por un frame(50);
Irà el doble de ràpido ;D
PD: Haz caso a los otros dos posts :)
Un ejemplo, utilizando una variable privada y_destino:
y_destino=y+30;
from y=y to y_destino;
if(MAP_GET_PIXEL(FILE,MAPPER,X,Y+30)==rgb(255,0,0)) break; end
end
Gracias a todos por sus respuestas, me han servido! :D