Autor Tema: Problemas con las colisiones y animaciones del sprite (solucionado)  (Leído 141 veces)

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

Desconectado Darkrabis

  • Visitante
  • *
  • Puntos: 10
  • Mensajes: 4
    • Ver Perfil
Tengo un problema con las animaciones de mi obj_player cuando este se mueve y choca con bloques a sus laterales, cuando choca con una pared este no se detiene sino que sigue caminando pero a su vez parpadea y atraviesa el bloque para luego desaparecer o atravesar el piso y caer al vacio. Este error surgió al momento de crear rampas en el juego, pero aunque quite ese código u otros mas sigue apareciendo. El juego lo estoy haciendo con código directamente, sin drag and drop y las medidas de las mascaras y tamaño de mi sprite son los mismos. Si alguien sabe como solucionarlo agradecería su ayuda porque estoy comenzando con esto y no tengo el conocimiento suficiente como para saber por que me da ese error.
« última modificación: Hoy a las 06:15:09 pm por Darkrabis »


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado 3dgeminis

  • Okupa
  • *
  • Puntos: 908
  • Mensajes: 1.256
  • Este no es el fin, es un nuevo comienzo...
    • Ver Perfil
Re:Problemas con las colisiones y animaciones del sprite
« Respuesta #1 en: Febrero 17, 2017, 11:33:11 pm »
Deberias mostrar el codigo que usas para mover y las colisiones.


Desconectado Darkrabis

  • Visitante
  • *
  • Puntos: 10
  • Mensajes: 4
    • Ver Perfil
Re:Problemas con las colisiones y animaciones del sprite
« Respuesta #2 en: Febrero 18, 2017, 02:12:49 pm »
-----Este es el código del desplazamiento

///Desplasamiento
var keyLeft, keyRight, keyJump, keyJumpRelease;

keyLeft        = -keyboard_check(vk_left);
keyRight       = keyboard_check(vk_right);

keyJump        = keyboard_check_pressed (ord('X'));
keyJumpRelease = keyboard_check_released(ord('X'));

//comprobacion de colisiones
intColLeft  = place_meeting(x - 1, y, obj_Block);
intColRight = place_meeting(x + 1, y, obj_Block);
bolGround   = place_meeting(x, y + 1, obj_Block);

intMove = keyLeft + keyRight;

//Definir aceleracion y friccion en funcion del medio
if (!bolGround)
{
    intTempAcc  = intAirAcc;
    intTempFric = intAirFric;
}
else
{
    intTempAcc  = intGroundAcc;
    intTempFric = intGroundFric;
}

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

//Velocidad vertical
if (!bolGround)
{
    intVY = scr_Approach(intVY, intVYMax, intGravityNorm);  //Caida libre
}
else
{
    if(intDJump == 0) intDJump++;
}

//salto
if (keyJump && bolGround) intVY = -intVYMax;

//Doble salto
if (keyJump && !bolGround && (intDJump > 0))
{
    intVY = -intVYMax * 0.75;
    intDJump--;
}

//colision horizontal
repeat(abs(intVX))
{   
    if (!place_meeting(x + sign(intVX), y,obj_Block))
    {
        x += sign(intVX);
    }
    else
    {
        intVX = 0;
        break;
    }
}


//colision vertical
repeat(abs(intVY))
{
    if (place_meeting(x, y + sign(intVY),obj_Block))
    {
        intVY = 0
        break;
    }
    else y += sign(intVY);
}

-----Este es el de las animaciones

///Animacion

//Reflejo del personaje
if(intMove != 0) image_xscale = sign(intVX);

//Cambio de sprite
if (!bolGround)
{
    sprite_index = spr_TothJump;
}
else
{
    sprite_index = spr_TothStanding;
    if (intVX != 0) sprite_index = spr_TothWalk ;
}

-----Sus variables

///Variables
image_speed = 0.6;

//Movimiento
intVY   = 0;
intVX   = 0;
intMove = 0;

intMultiplier = 1.0;  //Multiplicador
 
intVYMax       = 9    * intMultiplier;
intVXMax       = 12   * intMultiplier;
intJumpHeight  = 8    * intMultiplier;
intGravityNorm = 0.5  * intMultiplier;
intGroundAcc   = 1.0  * intMultiplier;
intGroundFric  = 1.9  * intMultiplier;
intAirAcc      = 0.75 * intMultiplier;
intAirFric     = 0.1  * intMultiplier;

//Salto
intDJump = 1;


------ Y el unico script que tengo

//scrApproach
if (argument0 < argument1)
    return min(argument0 + argument2, argument1);
else
    return max(argument0 - argument2, argument1);

Desconectado 3dgeminis

  • Okupa
  • *
  • Puntos: 908
  • Mensajes: 1.256
  • Este no es el fin, es un nuevo comienzo...
    • Ver Perfil
Re:Problemas con las colisiones y animaciones del sprite
« Respuesta #3 en: Ayer a las 12:11:59 am »
Usas un sprite aparte como mascara del objeto ??? Si no es asi crea uno y asignaselo al objeto como mascara.
Probe el codigo y me funciono bien, talves sea el cambio de sprite, las mascaras, el image_xscale.
Proba como te dije al principio.

Desconectado Darkrabis

  • Visitante
  • *
  • Puntos: 10
  • Mensajes: 4
    • Ver Perfil
Re:Problemas con las colisiones y animaciones del sprite
« Respuesta #4 en: Ayer a las 07:48:11 pm »
Probe con otros sprites y sigue pasando lo mismo, tambien verifique si tenia otro sprite como mascara de objeto que fuera mi pj pero si era el mismo. Otra cosa que no dije es que los sprites que uso son externos, osea los cree con otro programa y los mando como archivo gif, pero probando con los sprites que cree veo que no tiene nada que ver cierto?

Desconectado Darkrabis

  • Visitante
  • *
  • Puntos: 10
  • Mensajes: 4
    • Ver Perfil
Re:Problemas con las colisiones y animaciones del sprite
« Respuesta #5 en: Ayer a las 08:23:57 pm »
Ya encontre el problema, era lo otro que dijiste con respecto al image_excale. Lo cambien por intMove y si me funciona ahora, no se que es lo que cambia pero al parecer con el sign da problemas, gracias por la ayuda  XD

Desconectado 3dgeminis

  • Okupa
  • *
  • Puntos: 908
  • Mensajes: 1.256
  • Este no es el fin, es un nuevo comienzo...
    • Ver Perfil
Re:Problemas con las colisiones y animaciones del sprite
« Respuesta #6 en: Hoy a las 01:16:55 am »
Te me adelantaste .No es el sign si no la variable intVX. Cuando choca con una pared esta cambia constantemente entre 0 y 1 o 0 y-1, y parece que eso causa el problema.