Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: AgeX_005 en Junio 26, 2020, 10:55:16 PM

Título: Colison en vista desde arriba [diferente]
Publicado por: AgeX_005 en Junio 26, 2020, 10:55:16 PM
Wenas.. se que ya hay preguntas asi pero lo que to quiero lograr no es asi....

Yo tengo un personaje q se mieve hacia el mouse... su direccion apunta al mouse....y solo se puede mover adelante y atras pk la direccion se controla con el mouse (obvio)

Como haria un sistema de colisiones con este sistema de movimientos... me ayudan?? :,3

Yo lo q hago es q si toca la pared el speed se pone en 0 y si funciona pero como k se traba :/
Título: Re:Colison en vista desde arriba [diferente]
Publicado por: elmmeronw en Junio 27, 2020, 07:26:57 PM
Prueba con esto...

[gml]
if (place_meeting(x,y+hspeed,obj_solid))
{
    while(!place_meeting(x,y+sign(hspeed),obj_solid))
    {
        y += sign(hspeed);
    }
    hspeed = 0;
}
[/gml]

eso es una colision precisa para ambas direcciones tambien puede modificar las "hspeed" por "vspeed" que funciona igual espero que se de utilidad.
Título: Re:Colison en vista desde arriba [diferente]
Publicado por: RickTheCastle en Junio 30, 2020, 08:39:51 PM
Cita de: AgeX_005 en Junio 26, 2020, 10:55:16 PM
Wenas.. se que ya hay preguntas asi pero lo que to quiero lograr no es asi....

Yo tengo un personaje q se mieve hacia el mouse... su direccion apunta al mouse....y solo se puede mover adelante y atras pk la direccion se controla con el mouse (obvio)

Como haria un sistema de colisiones con este sistema de movimientos... me ayudan?? :,3

Yo lo q hago es q si toca la pared el speed se pone en 0 y si funciona pero como k se traba :/

Vale, existe una forma, pero es un poco complicada, aparte, como que no esta bien pulida que digamos:

En el evento create, haremos una variable la cual sera la velocidad

[gml]
///Velocidad Del Jugador
velocidad = 8
[/gml]

Luego, Iremos al evento step y en ese mismo evento crearemos otras 2 variables, no digo que sean necesarias pero nos facilitara el trabajo de repetir un codigo.
[gml]

/*Estas variables serán las coordenadas de la dirección a donde nos querremos mover.
En Este Caso, Es 1 pixel hacia la dirección que tenga determinado nuestro personaje*/

direction = point_direction(x,y,mouse_x,mouse_y)

xx = lengthdir_x(1,direction)
yy = lengthdir_y(1,direction)

/*Luego colocaremos que al presionar el botón izquierdo del mouse, nuestro personaje
se mueva a esa dirección, comprobando que no halla ningún objeto solido intermediario entre
su posicion, con la velocidad */

if mouse_check_button(mb_left){
     repeat(velocidad){
          if place_free(x + xx,y){
               x += xx
          }
          if place_free(x,y + yy){
               y += yy
          }
     }
}
[/gml]

Esto colisionara con cualquier objeto solido. Te recomiendo seriamente que no cambies la mascara de colisión, ya que podría ocasionar muchos errores respecto a eso.