Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Temas - izank11

1
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:
[gml]//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
[/gml]
Step:
[gml]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);
[/gml]
scrApproach:
[gml]if (argument0 < argument1)
   return min (argument0 + argument2, argument1);
else
   return max (argument0 - argument2, argument1);
[/gml]