Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: venus en Mayo 13, 2016, 01:12:31 PM

Título: Problemas con la detección de objetos en mi juego de plataformas.
Publicado por: venus en Mayo 13, 2016, 01:12:31 PM
Detecta como plataforma los objetos sólidos.

CREATE:
//Variables
max_gravedad = 12
h_aceleracion = 2
h_velocidad = 8
var_salto = 5




STEP:

//Aplicando gravedad
gravity = 1.5
if (!place_free(x, y+vspeed+2) && vspeed>=0) {
  gravity = 0;
  move_contact_solid (90, max_gravedad);
  vspeed = 0;
}

//Límites de velocidad
if (vspeed>max_gravedad) {
  vspeed = max_gravedad;
}

//Ningún movimiento
if (keyboard_check(vk_nokey) || keyboard_check(vk_left) && keyboard_check(vk_right)) {
  hspeed=0;
}   


//Ir a la derecha
if (keyboard_check(vk_right)) {
  if (place_free(x+hspeed+h_aceleracion,y)) {
    hspeed+=h_aceleracion
    if (hspeed > h_velocidad) {hspeed=h_velocidad}
  } else {
    hspeed=0;
    move_contact_solid ( 0 ,h_velocidad );
  }
}
   
   
//Ir a la izquierda
if (keyboard_check(vk_left)) {
  if (place_free(x+hspeed-h_aceleracion,y)) {
    hspeed-=h_aceleracion
    if (hspeed < -h_velocidad) {hspeed=-h_velocidad}
  } else {
    hspeed=0;
    move_contact_solid ( 180 ,h_velocidad );
  }
}   

//Saltar
if (keyboard_check_pressed(vk_up) && place_free(x,y-var_salto) && !place_free(x,y+vspeed+1)) {
  vspeed=-var_salto;
}




No va del todo mal, solo que a veces se atasca en alguna plataforma y se queda enganchado. Y no se muy bien por qué.
Necesito arreglar este código como sea o bien encontrar otro que vaya bien.
Título: Re:Problemas con la detección de objetos en mi juego de plataformas.
Publicado por: petpan13 en Mayo 13, 2016, 01:50:48 PM
Comprueba mascara de collision ponla en redonda y vuelve a probar.
Título: Re:Problemas con la detección de objetos en mi juego de plataformas.
Publicado por: venus en Mayo 13, 2016, 02:14:33 PM
No, pasa lo mismo.

Concretamente los problemas son dos:
1. Se queda parado en las esquinas sobresalientes sin poder avanzar o ir abajo.
2. Cuando se topa con una plataforma mirando hacia el lado contrario (por la aceleración) atraviesa la plataforma.
Título: Re:Problemas con la detección de objetos en mi juego de plataformas.
Publicado por: Clamud en Mayo 13, 2016, 04:12:17 PM
El error es éste
[gml]
move_contact_solid (90, max_gravedad);
[/gml]
quieres hacer contacto con el sólido hacia abajo, ¿o no?, y la dirección 90 es hacia arriba, deberías poner 270.

Lo mejor es no usar move_contact_solid, esa función siempre causa atascamiento.
En estos temas aparecen soluciones similares:
http://www.comunidadgm.org/preguntas-y-respuestas/colision-en-juego-de-plataformas/ (http://www.comunidadgm.org/preguntas-y-respuestas/colision-en-juego-de-plataformas/)
http://www.comunidadgm.org/preguntas-y-respuestas/bugs-comunes-en-mis-juegos-de-plataformas/ (http://www.comunidadgm.org/preguntas-y-respuestas/bugs-comunes-en-mis-juegos-de-plataformas/)
http://www.comunidadgm.org/preguntas-y-respuestas/problemas-con-colisiones-en-juego-de-plataformas/ (http://www.comunidadgm.org/preguntas-y-respuestas/problemas-con-colisiones-en-juego-de-plataformas/)
Título: Re:Problemas con la detección de objetos en mi juego de plataformas.
Publicado por: venus en Mayo 13, 2016, 04:53:08 PM
Eso estaba bien, pero me he equivocado al sustituir la variable. Para que se entendiera.
He cambiado algunas cosas y ahora tan solo queda el primer problema. Que es que en los bordes se queda parado. Pero solo si vas hacia abajo. Voy a probar a juntar el código de la gravedad con el otro.

Gracias por las referencias.
Título: Re:Problemas con la detección de objetos en mi juego de plataformas.
Publicado por: venus en Mayo 13, 2016, 07:50:30 PM
No da resultado. Y he intentado sustituir move_contact_solid pero nada. ¿Alguna idea?
Título: Re:Problemas con la detección de objetos en mi juego de plataformas.
Publicado por: Clamud en Mayo 14, 2016, 04:06:04 AM
Mira el ejemplo adjunto.