HEY! tanto tiempo sin publicar por aquí me alegra mucho que este sitio siga vivo y con futuro :) y como todos los martes llego la hora favorita de papa molestarlos con una duda :( prometo sera cortita
estaba trabajando en el proyecto Beat em up si no saben cual es pueden conseguir el código fuente y saber mas de el aquí:
http://www.comunidadgm.org/juegos-en-desarrollo/beat-em-up-proyect/msg127183/#msg127183
bueno el punto es tengo unas colisiones independientes a las que uso para la pared esas colisiones pertenecen a los bloques que puedo saltarles ensima todo funciona 10/10 pero hay un diminuto problema las colisiones no son lisas a que me refiero? a diferencia de las que tengo para paredes cuando te pegas a ellas y caminas reaccionan a tus movimientos dejándote deslizarte y eso es genial pero con las que tengo especialmente para objetos a los que me puedo trepar el sistema no funciona nada bien si trato de hacer lo mismo que en las otras me quedo atorado y no me puedo mover hasta que dejo de caminar contra el bloque.. alguna idea para repararlas?
código de colisión de objetos (te atoras) (este va en el evento colisión de cada objeto)
//sistema de colisiones
if ( ( z < other.z && other.height+other.z < z ) // de aqui
|| ( z+height < other.z && z > other.height+other.z ) )
{
x1 = 0;
y1 = 0;
x = xprevious;
y = yprevious;
}// a aqui es el problema que menciono trate de reconstruir el sistema pero se niega a funcionar
else
{
if( z < other.height+other.z ) //si estas sobre el bloque
{
if( y < other.y ) depth = other.depth - (other.y - y); //profundidad en el punto z
z_floor = other.height+other.z-1;
}
else if( z > other.z) //si esta mas alto que el personaje dejalo pasar
{
if( y > other.y ) depth = other.depth + (other.y+y);
//no hagas nada
}
}
}
y este código es para colisiones con objetos sólidos como una pared (este funciona genial y va en el evento STEP)
if (place_meeting(x+xSpeed,y,collider))
{
while(!place_meeting(x+sign(xSpeed),y,collider))
{
x+=sign(xSpeed);
}
xSpeed = 0;
if (ySpeed == 0)
{
RoundXCorners();
}
}
x += xSpeed;
if (place_meeting(x,y+ySpeed,collider))
{
while(!place_meeting(x,y+sign(ySpeed),collider))
{
y+=sign(ySpeed);
}
ySpeed = 0;
}
y += ySpeed;
aqui un video ejemplo de lo que pasa atencion como trato de alejarme lo mas posible de los sestos verdes y los bloques de mario en algunas ocasiones me quedo atascado al caminar
https://www.youtube.com/watch?v=mHuniNICVEs&feature=youtu.be