en mi juego tengo una plataforma que se mueve de un lugar a otro y se supone que te puedeas apoyar en ella, el problema es que mientras e mueve, los movimientos del personaje se anulan, por lo que el jugador no es capas de seguir la plataforma y se cae, en ese momento todo vuelve a la normalidad, fuera de eso todo es normal, detectan colisiones, no se si talves se que el jugador traspasa un poco la caja de colisiòn de la plataforma, este es el simple codigo de gravedad: [gml]if place_free(x,y+1)=true {y=y+5}[/gml] que puede estar mal? ninguno de los dos sprites tienen "precise collision check" en true, me esta volviendo loco, ayuda uso gamemaker: studio 1.4.9999
Trata usando este codigo
[gml]if (place_meeting(x, y + sign(y), objPlataforma) && !place_meeting(x, y, objPlataforma) && (y >= 0))
{
y += 0;
break;
}else if (!place_meeting(x,y + sign(y)))
{
y += 5
}
[/gml]
PD: No es necesario que pongas y=y+5 , solo debes poner y += 5. Saludos
Hola,
Con el permiso del camarada xStarLordx, le ofrezco esta otra solución.
if(distance_to_object(objeto_plataforma)<5)
{
objeto_especifico=instance_nearest(x,y+5,objeto_plataforma)
if(y<objeto_especifico.y)
{
x+=objeto_especifico.hspeed
}
}
Pero bueno, si no le explico como funciona entonces no podrá hacer nada. Lo primero es traducir lo que dice el código en palabras humanas, esto es lo que dice:
si la distancia a cualquier objeto_plataforma es menor que 5 pixeles entonces procede a hacer lo siguiente
{
A) Hallar el nombre del objeto específico, para trabajar solo con ese y no con otros objetos del mismo tipo
B) Si el objeto player se encuentra sobre el objeto plataforma especificado entonces:
C) Mover la posición X del player en el sentido y a la velocidad del objeto plataforma especificado
}
Este código tiene sus desventajas:
1. Funciona solo si el objeto plataforma móvil, se mueve por causa de su hspeed. Osea va a funcionar si estas moviendo la plataforma movil con la variable hspeed de esta.
2.
CitarEste código tiene sus desventajas:
1. Funciona solo si el objeto plataforma móvil, se mueve por causa de su hspeed. Osea va a funcionar si estas moviendo la plataforma movil con la variable hspeed de esta.
A juzgar por el codigo que nos dio supongo que calcula la velocidad horizontal sumandole puntos a x por lo tanto y con el permiso de dixon XD seria asi.
[gml]
if(distance_to_object(objeto_plataforma)<5)
{
objeto_especifico=instance_nearest(x,y+5,objeto_plataforma)
if(y<objeto_especifico.y)
{
x+=objeto_especifico.x //hice el cambio aqui
}
}[/gml]
PD: Si no lo usas asi solo debes poner el nombre de la variable que usas para la velocidad horizontal despues del punto
Hola,
:-[ Siento mucho contradecirlo amigo, eso produce una tele transportación como la de Gokú.
(http://imgfz.com/i/f4tkYPA.gif)
Puedes descargar el ejecutable y el editable para Game maker 4 Aquí (https://www.comunidadgm.org/preguntas-y-respuestas/inersia-y-movimiento-encima-de-movimiento/?action=dlattach;attach=18705)
El resultado es este, quedó fino...
(http://imgfz.com/i/vusRFLn.jpeg)
Esta es la version para game maker 8, puedes descargarla aquí (https://www.comunidadgm.org/preguntas-y-respuestas/inersia-y-movimiento-encima-de-movimiento/?action=dlattach;attach=18706)
(http://imgfz.com/i/IS73vHG.jpeg) (https://www.comunidadgm.org/preguntas-y-respuestas/inersia-y-movimiento-encima-de-movimiento/?action=dlattach;attach=18706)
Cita de: xStarLordx en Enero 06, 2020, 07:46:15 PM
A juzgar por el codigo que nos dio supongo que calcula la velocidad horizontal sumandole puntos a x por lo tanto y con el permiso de dixon XD seria asi.
[gml]
if(distance_to_object(objeto_plataforma)<5)
{
objeto_especifico=instance_nearest(x,y+5,objeto_plataforma)
if(y<objeto_especifico.y)
{
x+=objeto_especifico.x //hice el cambio aqui
}
}[/gml]
PD: Si no lo usas asi solo debes poner el nombre de la variable que usas para la velocidad horizontal despues del punto
agradesco eso, intentaré cada solución, de igul manera el objeto no se mueve por hspeed, espero la "teletransportación de gokú" no sea muy notable. este es el codigo de la platafrma por si sirve de algo :)
[gml]if going=1
{
move_towards_point(tope1.x,tope1.y,5)
}
if going=2
{
move_towards_point(tope2.x,tope2.y,5)
//colisión con tope 1
going=2
//colisión con tope 2
going=1
//así intercambiando.
}[/gml]
Hola, buenas noches.
Claro que va a funcionar porque ese move_toward_pint también está trabajando con la hspeed. El código ofrecido es para el objeto player, puede que presente algunas fallas, recuerda que tienes que cambiar los nombres de los objetos y puede presentar algunas fallas porque quizas interfiera con otro código de tu personaje.
En la versión para la Game maker 8, le incluí un código de empuje el cual es necesario. La plataforma empuja al jugador cuando este está parado, para que no lo traspase.
Cita de: dixon en Enero 07, 2020, 03:46:51 AM
Hola, buenas noches.
Claro que va a funcionar porque ese move_toward_pint también está trabajando con la hspeed. El código ofrecido es para el objeto player, puede que presente algunas fallas, recuerda que tienes que cambiar los nombres de los objetos y puede presentar algunas fallas porque quizas interfiera con otro código de tu personaje.
En la versión para la Game maker 8, le incluí un código de empuje el cual es necesario. La plataforma empuja al jugador cuando este está parado, para que no lo traspase.
ok he probado con la solución de hspeed, pero esta empiesa a funcionar despues de se caiga el jugador, porqu como he dicho, por alguna azo los movimientos se anulan. intentaré cambiar el codigo de gravedad, además la intencion era no anular los moimientos del jugador para que este siga la plataforma, no que este la siga sola. igual, es mas comodo con la solución dada, voy a intentar el codigo de gravedad sugerido para ver si es problema de colisión.