Hola amigos, me podrian ayudar con el movimiento de mi personaje? necesito que cuando pase por detras de la piramide(lineas azules), esta quede menos visible para poder ver detras de ella y tambien que cuando suba por los lados(lineas verdes) lo haga en diagonal y por ultimo que cuando estes subiendo no te caigas por los limites de la piramide(lineas rojas)
psd: el problema de pasar por detras de la piramide lo intente solucionar con coliciones y pense que se podria arreglar facil poniendo los objetos transparentes y en distintas profundidades solo que cuando mando al personaje mas atras le siguen afectando las colisiones que no estan en la misma profundidad :'(
tal vez no pueda resolver tu pregunta pero intentare de resolver parte de ella, estas de suerte trabajo en un juego isometrico y se un poco
puedes usar este código de movimiento y colisiones no es perfecto pero hace el trabajo (funciona si lo copias y pegas pero antes analiza para poder entender lo que sigue)
CREATE EVENT
h = 0; // velocidad horizontal
v = 0; // velocidad vertical
m = 1; // multiplica la velocidad actual
accel = 1 // aceleracion en el piso
fric = 0.5; // friccion en el piso
maxSpd = 2.1 // velocidad maxima
STEP EVENT
//[SISTEMA DE COLICIONES]
//--------------------------------------------------------------------------------//
// VARIABLES TEMPORALES
var i;
// VERTICAL
for (i = 0; i < abs(v); ++i) {
if (!place_meeting(x, y + sign(v),obj_parent_solid))
y += sign(v);
else {
v = 0;
break;
}
}
// HORIZONTAL
for (i = 0; i < abs(h); ++i) {
if (!place_meeting(x + sign(h), y, obj_parent_solid))
x += sign(h);
else {
h = 0;
break;
}
}
//[MOVIMIENTO (KEY INPUTS)]
//--------------------------------------------------------------------------------//
// IZQUIERDA
if (kLeft && !kRight)
{
if (h > 0)
h = Approach(h, 0, fric);
h = Approach(h, -maxSpd, accel);
}
// DERECHA
if (kRight && !kLeft)
{
if (h < 0)
h = Approach(h, 0, fric);
h = Approach(h, maxSpd, accel);
}
}
// ARRIBA
if (kUp && !kDown)
{
if (v > 0)
v = Approach(v, 0, fric);
v = Approach(v, -maxSpd, accel);
}
// ABAJO
if (kDown && !kUp)
{
if (v < 0)
v = Approach(v, 0, fric);
v = Approach(v, maxSpd, accel);
}
para manejar la profundidad
depth=-y*10
con lo de subir la rampa no creo poder ayudarte y aunque tenga algo esta experimental y no funciona correctamente la verdad pero si logro ver que pasa te lo comento
logre solucionar las subidas en diagonal, para crear el efecto de profundidad(la linea verde)
Cita de: cristopher2545 en Marzo 03, 2019, 08:30:22 AM
tal vez no pueda resolver tu pregunta pero intentare de resolver parte de ella, estas de suerte trabajo en un juego isometrico y se un poco
puedes usar este código de movimiento y colisiones no es perfecto pero hace el trabajo (funciona si lo copias y pegas pero antes analiza para poder entender lo que sigue)
CREATE EVENT
h = 0; // velocidad horizontal
v = 0; // velocidad vertical
m = 1; // multiplica la velocidad actual
accel = 1 // aceleracion en el piso
fric = 0.5; // friccion en el piso
maxSpd = 2.1 // velocidad maxima
STEP EVENT
//[SISTEMA DE COLICIONES]
//--------------------------------------------------------------------------------//
// VARIABLES TEMPORALES
var i;
// VERTICAL
for (i = 0; i < abs(v); ++i) {
if (!place_meeting(x, y + sign(v),obj_parent_solid))
y += sign(v);
else {
v = 0;
break;
}
}
// HORIZONTAL
for (i = 0; i < abs(h); ++i) {
if (!place_meeting(x + sign(h), y, obj_parent_solid))
x += sign(h);
else {
h = 0;
break;
}
}
//[MOVIMIENTO (KEY INPUTS)]
//--------------------------------------------------------------------------------//
// IZQUIERDA
if (kLeft && !kRight)
{
if (h > 0)
h = Approach(h, 0, fric);
h = Approach(h, -maxSpd, accel);
}
// DERECHA
if (kRight && !kLeft)
{
if (h < 0)
h = Approach(h, 0, fric);
h = Approach(h, maxSpd, accel);
}
}
// ARRIBA
if (kUp && !kDown)
{
if (v > 0)
v = Approach(v, 0, fric);
v = Approach(v, -maxSpd, accel);
}
// ABAJO
if (kDown && !kUp)
{
if (v < 0)
v = Approach(v, 0, fric);
v = Approach(v, maxSpd, accel);
}
para manejar la profundidad
depth=-y*10
con lo de subir la rampa no creo poder ayudarte y aunque tenga algo esta experimental y no funciona correctamente la verdad pero si logro ver que pasa te lo comento
lo de la rampa lo solucione asi, este es el ejemplo de la letra "A" lo que esta en rojo es lo que agregue para que lo hiciera, cree 2 escaleras una que subiera con la A y bajara con la D y otra que bajara con la A y subiera con la D, la disminucion de la velocidad en 0.5 se la puse para que de el efecto de que va mas lento en las escaleras.
switch(keyboard_key){
case ord("A"):
if place_meeting(x,y,escalera)
{
y+= velocidad - 0.5;
x-= -0.5;
}
if place_meeting(x,y,escalera2)
{
y-= velocidad -0.5;
x-= -0.5;
} x -= velocidad;
sprite_index = person_izqu;
image_speed= 0.3;
break;