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 :/
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.
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.