Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: LowHertzs en Abril 23, 2014, 09:00:51 PM

Título: Fallo con plataformas en movimiento
Publicado por: LowHertzs en Abril 23, 2014, 09:00:51 PM
Buenas! el fallo que tengo ahora es que hago uso de unas plataformas con movimiento es mi juego, es decir se van moviendo en una dirección y en otra, el fallo viene cuando salto hacia una de estás y le doy por un lado como en la siguiente imagen: (http://fotos.subefotos.com/5b79b33be9390f7f4c004c39a6ff31c8o.png) cuando esto sucede la plataforma para su movimiento y se bloquea, así mismo el personaje también y se queda pegado a ella por el lado, yo lo que quiero es que cuando pase esto no se quede enganchado y el personaje caiga y la plataforma continué con su movimiento normal, uso el siguiente código en las plataformas para hacer esto:

En create tengo puesto esto:
hspeed = -2;
alarm[0] = 30*2;

slope=0
//Set up a particle system for outlining the blocks...
ps=part_system_create();
pt=part_type_create();
pe=part_emitter_create(ps)
part_system_depth(ps,1);
part_type_sprite(pt,spr_block1_outline,0,0,0);
part_type_blend(pt,false);
part_type_alpha1(pt,1);
part_type_color1(pt,make_color_rgb(93,90,73));
part_type_gravity(pt,0,0)
part_type_size(pt,1,1,0,0);
part_type_life(pt,2,2);
part_type_scale(pt,1,1); 


Y en alarm0 esto:
hspeed = -hspeed;
alarm[0] = 30*2;


En el objeto del personaje, al tocar con la plataforma tengo puesto lo siguiente:

vspeed = other.vspeed;


Resumiendo mi problema viene en que el personaje al saltar hacia la plataforma si le da por el lado deja bloqueada la plataforma y el mismo personaje, y también que una vez que pasa esto, la plataforma CAMBIA SU TRAYECTORIA ORIGINAL, no se a que se puede deber, pero esto es lo que sucede.

Espero que alguien me pueda ayudar, saludos y gracias por anticipado!.
Título: Re:Fallo con plataformas en movimiento
Publicado por: eams1986 en Abril 23, 2014, 09:39:18 PM
El problema tuyo.es de.colisiones . Tienes que modificar la.de la.plataforma y del.player.
Y listo
Título: Re:Fallo con plataformas en movimiento
Publicado por: LowHertzs en Abril 23, 2014, 11:21:50 PM
Cita de: eams1986 en Abril 23, 2014, 09:39:18 PM
El problema tuyo.es de.colisiones . Tienes que modificar la.de la.plataforma y del.player.
Y listo

A que te refieres? no encuentro ningún fallo.. no sé como poner que detecte que está tocando desde uno de los lados.
Título: Re:Fallo con plataformas en movimiento
Publicado por: eams1986 en Abril 24, 2014, 12:31:18 AM
abre el sprite de la plataforma y donde dice modify mask entras y tu la hacen manual es como un tipo cuadro entre mas grande mas y mas pequeno no va ver collision ..
Título: Re:Fallo con plataformas en movimiento
Publicado por: eams1986 en Abril 24, 2014, 12:33:54 AM
sube el archivo yo le hago esa vuelta mijo.
Título: Re:Fallo con plataformas en movimiento
Publicado por: LowHertzs en Abril 24, 2014, 01:54:17 AM
Cita de: eams1986 en Abril 24, 2014, 12:33:54 AM
sube el archivo yo le hago esa vuelta mijo.

Aquí te lo dejo, y gracias!
Título: Re:Fallo con plataformas en movimiento
Publicado por: eams1986 en Abril 24, 2014, 05:19:25 AM
mira lo unicos que vas a ser es  poner este codigo  en e el objeto jugador con la plataforma y pones esto
no te preocupes por las collisiones que hablamos

//vspeed = 0;
//move_outside_solid(90,1);  esto lo cancele.

y puse esto

if other.y>y && !place_free(x,y+vspeed){
    move_contact_solid(270,8);
    vspeed=0;
    gravity=0;}
if other.y<y && !place_free(x,y+vspeed){
    move_contact_solid(90,8);
    vspeed=0;}
 

listo me avisas cualqiier THIN

Título: Re:Fallo con plataformas en movimiento
Publicado por: LowHertzs en Abril 24, 2014, 01:38:40 PM
Pero ahora si me subo en una plataforma no sigue su recorrido, y cambia su trayectoria, es decir si me subo en la vertical por ejemplo en vez de subir sigue bajando y llega incluso a desaparecer de la room.

A que se debe esto?

Dejo el ejemplo con lo que tu me dijiste que añadiese para que le eches un vistazo si puedes, saludos!.
Título: Re:Fallo con plataformas en movimiento
Publicado por: LowHertzs en Abril 25, 2014, 06:43:58 PM
¿Alguna idea alguien?, sigo dándole vueltas pero no encuentro que pueda ser..
Título: Re:Fallo con plataformas en movimiento
Publicado por: penumbra en Abril 25, 2014, 09:14:25 PM
Cita de: LowHertzs en Abril 23, 2014, 09:00:51 PM
el fallo viene cuando salto hacia una de estás y le doy por un lado, cuando esto sucede la plataforma para su movimiento y se bloquea

Yo dejaría de usar solid para las plataformas, y programaría las colisiones sin hacer uso de un evento de colisión.

Según la mecánica de tu juego, es importante diferenciar si se contacta la plataforma desde arriba (caer en ella) o desde los lados (chocar contra ella y no quedar sobre ella). Pero estás usando un evento de colisión para aterrizar en la plataforma. En lo que yo he probado, los eventos de colisión me dan resultado cuando quiero saber si se hizo contacto con algo, pero sin que me importe con qué zona exacta (si fue con un borde, con la parte de arriba o de abajo).

Personalmente no usaría eventos de colisión, para mi las funciones de colisión en STEP son más responsivas. El ícono de tu post está como GM:S, pero el archivo que subiste está en formato GM8. Si tienes la versión pro de GM8 también se pueden usar las variables bbox para detectar los bordes de las plataformas y controlar qué pasa cuando se choca de lado o desde abajo con la plataforma, aunque se puede hacer esto con un poco más de trabajo en la versión lite



Título: Re:Fallo con plataformas en movimiento
Publicado por: LowHertzs en Abril 25, 2014, 09:28:51 PM
Estoy usando GM:S, ese es un ejemplo que un compañero puso en el foro, y yo lo estoy editando a mi gusto para partir de esa base.

Por eso quiero corregir esos fallos que tiene.

Y respecto lo de "bbox" busqué en el manual de GM y no encuentro nada, ¿que funcion es esa y como se puede acceder a ella?, ¿solo a traves de código supongo?

Que forma usarías tú en GM:S para hacerlo teniendo en cuenta que tengo muy poca/ninguna experencia?
Título: Re:Fallo con plataformas en movimiento
Publicado por: penumbra en Abril 25, 2014, 10:03:13 PM
Cita de: LowHertzs en Abril 25, 2014, 09:28:51 PM
Estoy usando GM:S, ese es un ejemplo que un compañero puso en el foro, y yo lo estoy editando a mi gusto para partir de esa base.

XD Ya había modificado el ejemplo en GM8. Bueno, lo importé en GM:S y parece que va bien. Dejé de usar eventos de colisión para las plataformas. Las dos plataformas móviles las hice hijas de un objeto plataforma padre para manejar las colisiones en un solo código. El objeto que usas como suelo lo dejé como sólido, pero esto hace que al chocar de lado contra ellos el jugador se detenga, incluso si está en el aire. Modifiqué el origen del sprite y su máscara

MMM, me está dando problemas el subir el archivo como adjunto, acá lo dejo
https://www.mediafire.com/?009qk1pwsyff7ve (https://www.mediafire.com/?009qk1pwsyff7ve)
Título: Re:Fallo con plataformas en movimiento
Publicado por: LowHertzs en Abril 25, 2014, 10:24:00 PM
Lo de las plataformas funciona perfectamente, pero existe alguna manera de indicarle al player que el objeto "plataforma" es "solid" sin definirlo como tal?, es decir, no entiendo apenas.. pero tu definiste las plataformas con movimiento como solidas para el "player" sin definirlas como tal (creo) según el código de esta manera: if (!c_base) estarias preguntando si está sobre la base de la plataforma verdad?

¿Entonces como se podría hacer con la otra plataforma que no tiene movimiento para corregir ese fallo de movimiento?, habría que hacer otro parent?

*Lo siento por el lío enorme que tengo jaja.
Título: Re:Fallo con plataformas en movimiento
Publicado por: penumbra en Abril 25, 2014, 11:04:20 PM
Cita de: LowHertzs en Abril 25, 2014, 10:24:00 PM
estarias preguntando si está sobre la base de la plataforma verdad?
Sí c_base es una variable que me indica si la parte de abajo del jugador colisiona contra una plataforma. Esa parte de (!c_base) se puede mejorar, lo hice algo a la carrera.

Cita de: LowHertzs en Abril 25, 2014, 10:24:00 PM
pero tu definiste las plataformas con movimiento como solidas para el "player" sin definirlas como tal

No, las plataformas móviles las cambié a no sólidas (desmarqué la casilla). Lo que me indica que hay colisión contra una plataforma móvil, aunque no sea sólida, es la función collision_rectangle()


la verdad es que hay muchas maneras de solucionar el error de que el jugador se bloquea cuando choca lateralmente con los bloques de piso. No me atrevo a darte una porque seguro hay otra más eficiente. El caso es que yo jamas he usado sólidos, así que no tengo experiencia lidiando con ellos, creo que es posible solucionar el error incluso dejando el piso como sólido.