Noticias

Se ha publicado un nuevo servicio, el Portal de Juegos Online

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: Tengo un problema con la colisión con objetos  (Leído 899 veces)

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

Desconectado izank11

  • Visitante
  • *
  • Puntos: 4
  • Mensajes: 1
    • Ver Perfil
en: Junio 18, 2019, 04:38:51 pm
Mi personaje, al chocar con un objeto horizontalmente empieza a parpadear y atraviesa la pared poco a poco en cambio este problema no ocurre cuando choca verticalmente, aquí os dejo el código. Gracias de antemano.

Create:
//Movimiento
intVY = 0;        //VelocidadY
intVX = 0;        //VelocidadX
intMove = 0;    //Movimiento

intMultipler = 1.0; //Multiplicador

intVYMax            = 10        * intMultipler; //VelocidadY máxima
intVXMax            = 6.5        * intMultipler; //VelocidadX máxima
intGravityNorm        = 0.4        * intMultipler; //Gravedad normal
intGroundAcc        = 1.0        * intMultipler; //Acceleración en el suelo
intGroundFric        = 1.9        * intMultipler; //Fricción en el suelo
intAirAcc            = 0.75        * intMultipler; //Acceleración en el aire
intAirFric            = 0.75        * intMultipler; //Fricción en el aire
Step:
var keyLeft, keyRight, keyJump, keyJumpRelease;

keyLeft            = -keyboard_check(vk_left);                //Tecla flecha izquierda
keyRight        = keyboard_check(vk_right);                //Tecla flecha derecha

keyJump            = keyboard_check_pressed(vk_up);        //Tecla felcha arriba pulsada
keyJumpRelease    = keyboard_check_released(vk_up);        //Tecla felcha arriba soltada

//Comprobación de colisiones
bolGround        = place_meeting(x, y + 1, objBlock);        //Contacto con el suelo

intMove = keyLeft + keyRight;

//Definir aceleración y fricción en función del medio
if (!bolGround)
{    
    intTempAcc    = intAirAcc;        //Número temporal de aceleración en el aire
    intTempFric = intAirFric;        //Número temporal de fricción en el aire
}
else
{
    intTempAcc    = intGroundAcc;        //Número temporal de aceleración en el suelo
    intTempFric    = intGroundFric;    //Número temporal de fricción en el suelo
}

//Velocidad horizontal
if (intMove != 0) intVX = scrApproach(intVX, intVXMax * intMove, intTempAcc);
else intVX = scrApproach(intVX, intVXMax * intMove, intTempFric);

//Velocidad vertical
if (!bolGround)
{
    intVY = scrApproach(intVY, intVYMax, intGravityNorm); //Caída
}

//Salto
if (keyJump && bolGround) intVY = -intVXMax;

//Colisión horizontal
repeat(abs(intVX))
{
    if (place_meeting(x + sign(intVX), y, objBlock))
    {
        intVX = 0;
    }
    else x += sign(intVX);
}

//Colisión vertical
repeat(abs(intVY))
{
    if (place_meeting(x, y + sign(intVY), objBlock))
    {
        intVY = 0;
    }
    else y += sign(intVY);
}

//Animaciones
if (intMove != 0) image_xscale = sign(intVX);
scrApproach:
if (argument0 < argument1)
    return min (argument0 + argument2, argument1);
else
    return max (argument0 - argument2, argument1);
« última modificación: Julio 02, 2019, 09:32:13 pm por Johann »

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Kkunna

Respuesta #1 en: Junio 30, 2019, 06:05:03 am
Tengo mucho tiempo sin usar GM, pero se que lo que buscas puede ser solucionado con algun engine de "SLOPES".

Como en este video:
https://www.youtube.com/watch?v=UCVImfQ-Fyw

Por ahora solo puedo recomendarte buscar en internet o la sección de descargas.
https://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=1991


Desconectado yottaomi

  • Habitual
  • *
  • Puntos: 57
  • Mensajes: 31
    • Ver Perfil
Respuesta #2 en: Julio 02, 2019, 06:38:59 pm
Recuerdo haber visto este código en un vídeo de themontydrake.

Pero lo seguí al pie de la letra y no paraba de darme errores.

Creo que hay modos mucho más simples, con menos código, con el que obtener un resultado muy aceptable.

 


Desconectado 3dgeminis

Respuesta #3 en: Julio 04, 2019, 12:01:22 am
Es necesario que tenga friccion y aceleracion?

 


Desconectado inventarium

  • Visitante
  • *
  • Puntos: 13
  • Mensajes: 6
    • Ver Perfil
Respuesta #4 en: Julio 04, 2019, 11:26:46 am
Yo seguí el tutorial de TheMontyDrake y me funcionó. De hecho, ahora uso ese código en muchos juegos pero lo modifico un poco.

 


Desconectado cristopher2545

Respuesta #5 en: Julio 04, 2019, 07:28:56 pm

has probado el codigo de shawn spalding? funciona bastante bien y tiene agregada la friccion en el aire y en el piso solo debes modificar algunas variables, trae el wall jump y doble salto pre agregado

https://www.comunidadgm.org/desarrollo-de-scripts/platformer-'engine'-source-code/

Programame! como a una de tus árcades chinas

GET BEHIND ME DOCTOR!