tengo un objeto que cada 32 steps crea un escalon, este se mueve (vspeed=2, hspeed=-3)
cuando el j1 se encuentra encima se setea (j1.x = escalon.hspeed, j1.y=escalon.vspeed) .el problema es cuando colisiona por arriba del escalon actual y por el lado del siguiente escalon, llega un momento que el escalon se empieza a mover, y los ecalones tienen que ser fijos en su ruta, no desplazarse en la colision. no pasa siempre pero si se le fuerza sale este bug... como puedo arreglarlo?
Pues hay varias maneras de hacerlo, pero yo usaría la función collision_line para que sólo detecte colisiones verticales (sobre el escalón) y no laterales (al lado del escalón).
pero la colision lateral tambien debe de hacerla no? sino atravesaria y no lo tomaria como escalon... voy a indagar sobre la funcion esa a ver como puedo solucionarlo, gracias
Cita de: abramelin en Marzo 10, 2014, 08:06:06 PM
pero la colision lateral tambien debe de hacerla no? sino atravesaria y no lo tomaria como escalon... voy a indagar sobre la funcion esa a ver como puedo solucionarlo, gracias
Puedes dejar las colisiones actuales como están, para que el jugador no traspase los escalones, pero sólo permitir esto:
(j1.x = escalon.hspeed, j1.y=escalon.vspeed) .
cuando colission_line sea true (en realidad no devuelve true, devolvería el ID del escalón)
he puesto en el objeto j1, en el evento colision con el objeto escalon lo siguiente:
if collision_line(x,y,j1.x,j1.y,escalon,1,0) = true
move to contact direction=direction, maximun=12, solid objects
vspeed=0
en el evento begin step del j1 (es donde mejor me ha funcionado) tengo esto que no lo he tocado:
if there is an object at that position: escalon, x=0,y=8
(j1.y=escalon.vspeed,j1.x=escalon.hspeed)
el objeto escalon no tiene nada en cuanto a colisiones
la colision se hace peor y el escalon se para de forma aun mas bestia , no hay alguna forma de decirle al escalon que no se pare ante ninguna colision?
collision_line debe ir en step, regularmente así debe de ser. Pero creo que las coordenas que pusiste en la función no están bien, CREO. Lo que no es muy correcto es "= true", pero como GM es bastante permisivo, puede que funcione.
Olvida lo de collision_line XD. Ahora comprendí que detectar colisión hacia abajo no tiene nada qué ver con que el escalón se mueva. No había entendido que eran unas escaleras mecánicas, yo creía que era una plataforma móvil XD
Lo que no entiendo es por qué el escalón se mueve cuando el jugador contacta con él. Esto no debería de suceder a menos que tú se lo estés indicando en algún lugar. ¿No tienes un evento de colisión contra el jugador en el objeto escalón? ¿Hacia donde se mueven los escalones cuando ocurre el bug?
la unica colision que tengo puesta en el escalon es con un marcador para destruir la istancia y queda muy lejos de donde estoy haciendo las pruebas...... asi que descartado
estoy pensando que puede ser porque el escalon es solido, aunque el jugador no lo es, esta claro que la colision es lo que provoca el fallo, pero no se donde esta el problema... si pudiera hacer que el escalon no parase, no tendria que tocar nada mas ya que siempre arrastraria al j1
edito: cambiando valores en el begin step del j1 :
if there is an object at that position: escalon x=23 y=8 relativo al j1
(j1.y=escalon.vspeed, j1.x=escalon.hspeed)
parece que pasa menos (un 15% de las veces forzando el bug a mala leche en la esquina entre un escalon y otro) pero sigue pasando y parece que cuanto mas incremento x se va corriegiendo pero esto no deberia de ser asi digo yo, ademas que no acaba de arreglarse... gracias de todas formas