Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Black_Cat en Abril 23, 2016, 07:50:19 PM

Título: Evitar que plataforma movil se superponga con el personaje
Publicado por: Black_Cat en Abril 23, 2016, 07:50:19 PM
holaaaa, estoy desarrollando un juego en el que tienes una mascota, la cual puede treparse a plataformas moviles horizontales. De esas que se mueven de lado a lado y el personaje sube y viaja con la innercia.

el problema está en que cuando colisiona con la plataforma de manera lateral y dicha plataforma viene en la dirección contraria, ambos chocan y se quedan pegados. Lo cual hace que la plataforma se quede quieta y el personaje levite hasta que uno mismo presione el boton para ir en la direccion contraria.

Imagen del problema:

(http://i1218.photobucket.com/albums/dd416/gato12893/Sin%20tiacutetulo_2.png) (http://s1218.photobucket.com/user/gato12893/media/Sin%20tiacutetulo_2.png.html)

traté de solucionarlo de la siguiente manera:
Cada vez que el jugador colisionara con la plataforma, dicha plataforma cambiaría de direccion para que no hubiera superposicion.
El problema está en que si el personaje choca desde abajo o bien, desde arriba, para subirse y viajar, la plataforma cambia de direccion, de todas maneras.

cómo podria solucionar el problema?
Título: Re:Evitar que plataforma movil se superponga con el personaje
Publicado por: bygdle en Abril 23, 2016, 07:57:08 PM
Podrías hacerlo de la misma forma en la que lo estabas intentando hacer, sólo que cambie de dirección únicamente si la colisión es lateral.
Por ejemplo, digamos que la "dirección" se maneja con hspeed, obviamente positivo para la derecha y negativo para la izquierda.

Entonces, en el step de la plataforma móvil:
[gml]
var choca, aa = 0;
//Suponiendo que el tamaño de la plataforma es 32*32
switch (sign(hspeed)) {
    case 1:  aa = 32;
    case -1: aa = 0;
}
choca = collision_rectangle(x + aa, y, x + aa + sign(hspeed)*4 /*Siendo que la velocidad del player es de 4*/, y+32, player, false, true); //Sólo un ejemplo

if choca != noone
    hspeed = -hspeed;
[/gml]
No lo he probado, pero quizás funcione.
Título: Re:Evitar que plataforma movil se superponga con el personaje
Publicado por: Black_Cat en Abril 23, 2016, 08:11:28 PM

gracias por la respuesta, tu codigo me dio una idea y de pasó me ayudo a simplificarlo
finalmente usé este:[GML]



if (place_meeting(x + (16 * sign(hspeed) ), y, karen))
    hspeed = -hspeed;


[/GML]

que basicamente esquiva a la mascota para que no choque
gracias! :D