Buenas! :) esta es mi primera vez en el foro y ah tenido que ser por un problema que estoy teniendo para implementar una de mis plataformas móviles.
Tengo un objeto que eh logrado que siga una trayectoria circular usando lengthdir_x y lengthdir_y con sus respectivos ángulos y con su distancia marcada del centro del eje, el problema que tengo es que el movimiento de este objeto se efectúa directamente sobre sus coordenadas X e Y dependiendo del angulo que tenga con referencia al centro y necesito "pasos" osea, una medida que pueda sumársela a la hspeed y vspeed de mi jugador para que sea arrastrado junto con la plataforma, pero no se como encontrar dichas medidas dentro del movimiento, espero que puedan ayudarme :-[
:GMS:
Hola LastSparkle
Game Maker guarda las coordenadas que tenía el objeto en el Step Anterior.
Cuando cambias la "X" e "Y" de la plataforma, puedes encontrar cuántos pixeles se movió horizontalmente/verticalmente y aplicarlos al player.
Ejemplo, en el Evento que mueve tu plataforma:
[gml]//Primero calcula si el player está arriba tuyo:
var player_arriba = false
if ( place_meeting(x,y-1,obj_player) ) { player_arriba = true } //Si la plataforma es atravezable, deberás hacer otro check.
//Ahora mueves la plataforma con el código que tengas
x = lengthdir_x bla bla
y = lengthdir_y lo mismo
//Acá la magia
var x_offset = x - xprevious //Esto calcula cuántos pixeles se movió la plataforma
var y_offset = y - yprevious
//Si el player estaba arriba de la plataforma, lo mueve también:
if ( player_arriba ) {
obj_player.x += x_offset
obj_player.y += y_offset
//Acá debes correr un código de colisión en el player para detectar si ha colisionado con algo, así evitas que el player se atasque.
//Según el resultado puedes regresar la plataforma a su posición anterior (x = xprevious) para no avanzar o botar al player de la plataforma o causarle daño al player o no mover el player, etc.
//Ejemplo, si el player colisiona, no mueve la plataforma:
var player_colisiona = false
with ( obj_player ) { if ( place_meeting(x,y,obj_wall) ) { player_colisiona = true } }
if ( player_colisiona = true ) { x = xprevious; y = yprevious; obj_player.x -= x_offset; obj_player.y += y_offset } //Esto regresa tanto a la plataforma como al player a la posición anterior.
}[/gml]
Yo he llamado al player "obj_player", pero tu le pones el nombre que usaste tú
Saludos
oooohhhhh :OOOOO, no conocía esa variable de game maker!
gracias, y tu forma de explicarlo con la captura tambien me gusto mucho :D