Diciembre 29, 2018, 03:17:26 AM Ultima modificación: Enero 01, 2019, 03:40:21 PM por elmmertonw
Bueno en poca palabras ... tengo un objeto [Jugador] que siempre esta colacionando con otro objeto [Área] , el Jugador siempre esta dentro de  Área y ya esta programado si se acercara a los bordes de la Área no podría salir de Área su velocidad se reduce a 0. el problema es que integre gravedad y un salto a Jugador para y una colicion de caída y Área el problema es que presenta algunos fallos El jugador traspasa un poco el Área y no se detiene dentro de esta.

EL CÓDIGO UTILIZADO


if(!place_meeting(x,y+19,obj_area)){
    gravity=0;
    vspeed=0;
    gravity_direction=270;
    }else{gravity=2;}
    if(!place_meeting(x,y-19,obj_area)){vspeed=0;}
   
    if(keyboard_check(vk_left)){
    if(place_meeting(x-19,y,obj_area)){
    hspeed=-3
    }else{hspeed=0;}
    }
    if(keyboard_check(vk_right)){
    if(place_meeting(x+19,y,obj_area)){
    hspeed=3
    }else{hspeed=0;}   
    }
     if(keyboard_check_pressed(vk_up)and vspeed=0){
       
        vspeed=-20;}
   
    if(keyboard_check_released(vk_up)){vspeed=vspeed/2;}
    if(keyboard_check_released(vk_left)){hspeed=0;}
    if(keyboard_check_released(vk_right)){hspeed=0;}


Mucha gracias por su atencion  :)
:3 visita mi canal-cito de youtube :3

Esto sucede porque necesitas re ubicar a tu personaje una vez detecte que va a estar por fuera del área.

Por decir algo, si tu jugador ya estaba a medio traspasar el área y simplemente le dices que deje de caer, pues el se va a quedar ahí donde estaba...

Para solucionarlo no sabría como decirte específicamente ya que no se como es el objeto del área como tal, pero la solución se vería algo así (Te dejo los cambios documentados):

[gml]
if(!place_meeting(x,y+19,obj_area)){
    gravity=0;
    vspeed=0;
    gravity_direction=270;

    // Aquí debes re ubicar al personaje, esto depende de tu juego
    y = bordeInferiorDelArea - offsetDelTamanoDelPersonaje;
}else{
   gravity=2;
}

if(!place_meeting(x,y-19,obj_area)){
    vspeed=0;

    // Aquí debes re ubicar al personaje, esto depende de tu juego
    y = borderSuperiorDelArea + offsetDelTamanoDelPersonaje;
}
   
if(keyboard_check(vk_left)) {
    if(place_meeting(x-19,y,obj_area)) {
      hspeed=-3
    } else {
      hspeed=0;
   }
}

if(keyboard_check(vk_right)){
    if(place_meeting(x+19,y,obj_area)) {
      hspeed=3
    }else{
      hspeed=0;
   }   
}

if(keyboard_check_pressed(vk_up) and vspeed=0){
    vspeed=-20;
}
   
if(keyboard_check_released(vk_up)){vspeed=vspeed/2;}
if(keyboard_check_released(vk_left)){hspeed=0;}
if(keyboard_check_released(vk_right)){hspeed=0;}
[/gml]

No te va a funcionar así obviamente porque depende de la posición del area y también del tamaño del jugador y su punto de rotación, entre otros...

Pero esa es básicamente la solución

Saludos

Checa mi canal de Youtube para tutoriales y charlas sobre desarrollo de videojuegos.


Cita de: Jucarave en Diciembre 29, 2018, 06:17:52 PM
Esto sucede porque necesitas re ubicar a tu personaje una vez detecte que va a estar por fuera del área.

Por decir algo, si tu jugador ya estaba a medio traspasar el área y simplemente le dices que deje de caer, pues el se va a quedar ahí donde estaba...

Para solucionarlo no sabría como decirte específicamente ya que no se como es el objeto del área como tal, pero la solución se vería algo así (Te dejo los cambios documentados):

[gml]
if(!place_meeting(x,y+19,obj_area)){
    gravity=0;
    vspeed=0;
    gravity_direction=270;

    // Aquí debes re ubicar al personaje, esto depende de tu juego
    y = bordeInferiorDelArea - offsetDelTamanoDelPersonaje;
}else{
   gravity=2;
}

if(!place_meeting(x,y-19,obj_area)){
    vspeed=0;

    // Aquí debes re ubicar al personaje, esto depende de tu juego
    y = borderSuperiorDelArea + offsetDelTamanoDelPersonaje;
}
   
if(keyboard_check(vk_left)) {
    if(place_meeting(x-19,y,obj_area)) {
      hspeed=-3
    } else {
      hspeed=0;
   }
}

if(keyboard_check(vk_right)){
    if(place_meeting(x+19,y,obj_area)) {
      hspeed=3
    }else{
      hspeed=0;
   }   
}

if(keyboard_check_pressed(vk_up) and vspeed=0){
    vspeed=-20;
}
   
if(keyboard_check_released(vk_up)){vspeed=vspeed/2;}
if(keyboard_check_released(vk_left)){hspeed=0;}
if(keyboard_check_released(vk_right)){hspeed=0;}
[/gml]

No te va a funcionar así obviamente porque depende de la posición del area y también del tamaño del jugador y su punto de rotación, entre otros...

Pero esa es básicamente la solución

Saludos
Que bien, se puede hacer eso para es saber el tamaño de el sprite de player y area dividirlo entre 2 para que tengamos el centro de sprite y luego aplicar la formula que me pasaste muchas gracias jucarave[/b][/size]
:3 visita mi canal-cito de youtube :3