Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Problema en colisión con la nada[Solucionado]  (Leído 261 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado elmmertonw

  • Habitual
  • *
  • Puntos: 81
  • Mensajes: 52
  • Agradecido: 6 veces
  • Sexo: Masculino
  • I'm brony :D Compositor,Artista,Programador...
    • Ver Perfil
    • Mi pequeño canal para aprender a programar
en: Diciembre 29, 2018, 03:17:26 am
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


Código: [Seleccionar]
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  :)
« última modificación: Enero 01, 2019, 03:40:21 pm por elmmertonw »

:3 visita mi canal-cito de youtube :3
 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Jucarave

  • Ganador Proyecto Nexo
  • Beta-tester
  • Adicto
  • *
  • Puntos: 431
  • Mensajes: 488
  • Agradecido: 27 veces
  • Sexo: Masculino
  • De regreso con un nuevo proyecto
    • Ver Perfil
    • Jucarave Games
Respuesta #1 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):

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;}

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.

 
Los siguientes usuarios dieron las gracias a este tema: elmmeronw, elmmertonw


Desconectado elmmertonw

  • Habitual
  • *
  • Puntos: 81
  • Mensajes: 52
  • Agradecido: 6 veces
  • Sexo: Masculino
  • I'm brony :D Compositor,Artista,Programador...
    • Ver Perfil
    • Mi pequeño canal para aprender a programar
Respuesta #2 en: Enero 01, 2019, 01:17:52 am
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):

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;}

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