Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: thej en Noviembre 11, 2019, 09:41:03 PM

Título: agarrar un objeto
Publicado por: thej en Noviembre 11, 2019, 09:41:03 PM
hola
estoy haciendo un juego y quiero saber como hacer que un jugador agarre un objeto
el juego es un shooter top-down :GMS:
Título: Re:agarrar un objeto
Publicado por: elviskelley en Noviembre 12, 2019, 11:19:43 AM
LE colocas una variable al objecto que al collisionar con el jugador y estepresione no se que tecla la active, y se quede con el jugador a distancia x,y, tal y misma direccion. luego puedes colocar al mismo object que al soltar la tecla (realise) se desactiva la variable y puedes cambiar el estado. por dar un ejemplo de Mario Bros con las tortugas, estas estan inmoviles, Mario las coge y arroja, la tortuga tiene como 5 Estados.  (Viva, inconciente, cogida, liberada para atacar, y muerta)
Cada estado se activa con una variable y corresponde a un script que agregas para su ejecucion.
ejemplo la tortuga debe tener algo en su create como.
viva=false; //ya que sale viva y moviendose.
inconciente=false; //ya que queda solo en caparazon cuando mario le cae arriba.
cogida=false; //ya que queda cogida solo si mario la toma.
liberada=false; //ya que es un estado que se da si mario la tropiesa al estar inconciente o si la suelta.
muerta=false; //pues aqui solo es para cambiar al estado animacion de muerta y evitar se ejecute cualquier otro estado diferente.

Y para activarla debe tener algo asi.
if not viva  and distance_to_object(x,y,objMario) < (400)
{viva=true;}
//Esto activaria viva... y empesaria a moverse hacia Mario... Aunque me parece que Mario desactiva las instancia fuera de la view... PEro es solo un ejemplo.

El hecho es que al objecto le das una pequeña IA para que funcione bien. En tu caso podria ser Solo 2 Estados si fuera un arma, (cogida, liberada)

y tener algo asi....
En el event collision con player.
if not cogida and o_Player.keyboard_check_pressed(ord('X')) then
{cogida=true;}
//si la toca y presiona X activa cogida.

ahora en event X release/
if cogida
{cogida=false; liberada=true;}

//asi desactivas o no las variables.
ahora en event End step ya colocas lo que debe suceder. ejemplo;
if cogida then
{x=o_Player.x+16; y=o_Player.y; }
//si esta cogida se queda junto al player claro puedes sumar a x,y, para ajustarlo a su ubicacion exacta, como lo hice en X.
if liberada then
{
if place_free(x,y+1) then
{y+=1;} //Esto para que caiga al suelo y permanesca alli un tiempo
alarm[0]=5*room_speed; //activara la alarm 0 en 5 segundos.
liberada=false; //la desactivo xq ya no se necesita este activada
}

event alarm 0
if not cogida then
{instance_destroy();}
//si ya no la coges de nuevo se destruye, no se requiere mas, asi que para que tener ese recurso ocupado...

asi es con cada cosa, por minimo que sea debe tener una IA por chica que sea.