Hola makeros, ultimamente, me he estado dando vueltas en las colisiones de mi juego, y en realidad que me cuestan, ya que quiero tratar de que sean precisas, pero aún asi, no me funciona bien cuando escojo diversos objetos de colision...
El codigo que tengo hasta ahora, no considera para nada el desarrollo de slopes (cuestas), me gustaría poder implementar slopes :).
El juego lo estoy haciendo con gravedad, pero, no depende de la variable gravity, implementada en el programa, ya que ocupo variables propias, mi idea es hacer que funcione tanto para una gravedad positiva
(hacia abajo), como una gravedad negativa (hacia arriba):
if (vel_y*sign(gravedad) < max_vel_y)
{
vel_y += gravedad;
}
else
{
vel_y = max_vel_y*sign(gravedad);
}
ahora lo que hago es lo siguiente:
if (gravedad > 0)
{
vel_y_pre = 0;
if (vel_y > 0)
{
for (i = 0; i <= vel_y+1; i += 1)
{
if !place_meeting(x,y+i,obj_solido)
vel_y_pre = i;
else
break;
}
y += vel_y_pre;
if (vel_y_pre == 0)
{ground = true}
else
{ground = false}
}
else
{
for (i = 0; i >= vel_y-1; i -= 1)
{
if !place_meeting(x,y+i,obj_solido))
vel_y_pre = i;
else
break;
}
y += vel_y_pre;
if (vel_y_pre = 0)
{vel_y = 0}
}
Hasta ahora bien, el personaje baja a la velocidad que sea, y colisiona bien con el objeto, sin quedar 1 pixel arriba o 1 pixel abajo, tengo otro codigo para cuando la gravedad es menor que cero, y es casi igual, ahora, cuando en vez de escribir en el codigo "obj_solido", que es un objeto, escribo "colision", que es una variable
que depende de que objeto este topando, que en mi juego puede ser "obj_piso" u "obj_solido", en el cual "obj_piso" es una plataforma que no deja que el personaje la pase desde arriba hacia abajo, pero si de abajo hacia arriba, y lo unico que ocurre mal, es que la precision se va, en el sentido que aveces el personaje se cae,
como podría hacer colisiones sencillas, pero precisas? que el personaje no se quede volando 1 pixel?
gracias por leer. cualquier ayuda estaré muy agradecido ;)
Acabo de rehacer el codigo, hasta ahora, me han dado muy buenos resultados :), pero lo unico malo es que no se como hacerle slopes :-[.
Las colisiones estan precisas, y hay tres tipos de colisiones, solido, piso y techo, y funcionan bien. lo unico que me cuesta ahora es saber cual es un buen codigo para los slopes. que me recomiendan?
Dejo un ejemplo adjunto, el movimiento horizontal tambien es preciso, y al final de la parte del codigo, solo hago:
x += vel_xp
pero presiento que debo hacer un while o un for, para hacer los slopes, en unos ejemplos tambien vi que ocupaban la funcion move_contact_solid(), pero intenté agregarlas al codigo, y bajando un slope todo bien, pero no puede subirlo...
El otro dia se me habia ocurrido hacer los slopes calculando el angulo de colision con dos puntos, de forma que el personaje este como andando en una patineta, pero aún no me funciona al 100% :P.
saludos, fab62, seré el primero en responderte xD
bueno, he probado el engine, y excepto los slopes todo está muy bien, conseguiste hacer algo que a mí nunca me salió, que son las plataformas que puedes atravesar saltando, pero no al revés :P
los slopes son muy difíciles de hacer, lo sé por experiencia, intenté hacer un sistema de slopes y me rompí la cabeza en el proceso xD...
efectivamente, debes de usar loops, podría decirse que es imposible hacer slopes sin loops :-[ (eso creo)
es muy difícil (te lo repito xD)
hay un engine muy bueno de super mario con slopes, link: http://martinpiecyk.com/site/platformengine/
yo te aconsejaría que dejases tu plataformas sin slopes xD
salu2
Muchas gracias por la pagina, algo pude sacar de eso, ya que salia una imagen que explicaba como hacer un slope, y me dio una idea, y si, es un buen consejo que no le haga slopes, pero seria igual un desafio :)...
Saludos