Autor Tema: salto en plataforma 3d  (Leído 361 veces)

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

Desconectado Ares074

salto en plataforma 3d
« en: Abril 11, 2018, 09:08:04 pm »
Hola esta es mi duda tengo mi juego en 3d con el personaje en 2d  ,  El personaje  salta cuando aumento la variable z que le cambie el nombre a z1 cuando z1 llega a cierto valor hago que disminuya asta llegar a 0 y eso da el efecto de salto ,Asta hay esta bien ,el problemas es cuando quiero que se pare en una plataforma cuando salte digamos que para subir unas escaleras saltando, Los bloques de las escaleras también tienen la variable z1 que es igual a lo alto del bloque , Mi idea es que cuando el personaje salte  y colisione con el bloque si z1 es igual al z1 del bloque z1 del personaje sea igual al z1 del bloque
algo asi
Código: [Seleccionar]
if place_meeting(x , y, bloque){ if z1=bloque.z1 z1=bloque.z1}pero no me sale .
Quisiera saber si ay alguna forma de hacerlo mejor o como ustedes lo resolverían


 
No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Conectado Goganpis

Re:salto en plataforma 3d
« Respuesta #1 en: Abril 12, 2018, 04:36:03 pm »
Depende mira los videos de jucarave es un buen profesor
 


Desconectado Clamud

Re:salto en plataforma 3d
« Respuesta #2 en: Abril 13, 2018, 03:35:28 pm »
¿El personaje se puede mover en las 3 dimensiones?
¿Cómo construyes el escenario?

He utilizado este método:
Los bloques se colocan en el plano XY y se dibujan a diferentes alturas dependiendo de su variable z.
El personaje revisa en cada step la variable z de los bloques que está tocando, el valor más grande es la altura del suelo.
Hay una variable de gravedad y una variable de velocidad en z, en cada step la gravedad se resta a la velocidad
zs -= g; //efecto de la gravedad
En cada step el personaje se desplaza y si su variable z es menor a la del piso su velocidad se hace cero y se coloca sobre el piso.
z += zs; //desplazamiento vertical
if (z<gnd) {zs=0; z=gnd;} //no se puede atravesar el suelo

Adjunto un editable, pero es posible que no funcione bien en GMS.
 
Los siguientes usuarios dieron las gracias a este tema: yokaiworld, getnoff

Desconectado Ares074

Re:salto en plataforma 3d
« Respuesta #3 en: Abril 13, 2018, 11:35:52 pm »
Hola gracias por la ayuda Clamud la cámara que uso es la misma en la que me ayudaste es  la cámara estilo yume niki que era reducir la cámara para que no atravesara las paredes solo que le modifique la dirección y el angulo, La cámara sigue al personaje en las 3 dimensiones pero no se mueve con el mouse  y la altura de la cámara aumenta  según la altura del personaje

El personaje se mueve en las 3 dimensiones y esta dibujado como un modelo
los bloques los dibujo con d3d_draw_block donde z es la altura del bloque el personaje también tiene la variable z que es la que uso para que salte
Estuve viendo el ejemplo y me da error en gnd = instance_position(x,y,obj_piso).z dice que no encuentra la variable obj_piso.z ya la tengo declarada z en create del objeto piso
el obj_piso son bloques y z=0
 

Desconectado Clamud

Re:salto en plataforma 3d
« Respuesta #4 en: Abril 16, 2018, 03:16:33 am »
¿Cómo es el mensaje original?

Modifiqué algunas cosas para que funcione en GMS, y me di cuenta de que el objeto obGnd0 es parent de los otros obGnd, tal vez falta agregar algo parecido a tu juego. Adjunto el nuevo editable.
 

Desconectado Ares074

Re:salto en plataforma 3d
« Respuesta #5 en: Abril 16, 2018, 07:00:24 am »
Hola gracias ya no me sale ningún error  ,el error que me salia era problema de una variable que avía puesto.
El problema ahora es que el  personaje brinca pero z no aumenta cuando colisiona con el bloque
El código lo tengo así

Create
Código: [Seleccionar]
em = 0; //direccion de empuje
gnd = instance_position(x,y,obj_piso).z1;
z1 = gnd;
g = 16/15; //gravity
js = 16/3; //jump speed
zs = 0; //'z' speed

Step
Código: [Seleccionar]
j = ( keyboard_check(ord('F')) or (joystick_check_button(1,1)) );

j_prs = (j and !j_prv);
j_rls = (!j and j_prv);
j_prv = j;

Código: [Seleccionar]
gnd = instance_place(x,y,obj_piso).z1; //altura del suelo
//if(z<gnd) {x=xprevious; y=yprevious;}
zs -= g; //la gravedad siempre est� actuando
if((z1+zs)<gnd) {zs=0; z1=gnd;} //no se puede atravesar el suelo
if(j_prs and (z==gnd)) zs = js; //se activa el salto
z1 += zs; //a la posicion se le agrega la velocidad

El personaje esta dibujado asi
Código: [Seleccionar]
/// Dibujar personaje
d3d_set_lighting(false);
///sombra
//d3d_draw_floor(x+8,y-8,1,x-8,y+8,z1,sprite_get_texture(sprite16,image_index),1,1)

d3d_transform_set_rotation_z( obCamara.direction );

d3d_transform_add_translation( x,y,0 );
d3d_model_draw(mdl, 0,0,z1, sprite_get_texture(tx,image_index));

d3d_transform_set_identity();

En ves de z lo tengo como z1 los bloques también estan con z1
 

Desconectado Clamud

Re:salto en plataforma 3d
« Respuesta #6 en: Abril 16, 2018, 06:03:14 pm »
Estoy pensando que el método con instance_position solo funciona bien en GM8. Una alternativa para encontrar la altura del suelo es esta:
ins1 = true; //para determinar si es la primera instancia que se revisa
with (obj_piso) {
    if place_meeting(x,y, other.id) {
        if (other.ins1) { //primera instancia
            other.gnd = id.z1; //altura de esa instancia
            other.ins1 = false; //ya se revisó
        }
        else{
            //si la altura es mayor, sustituye a la anterior
            other.gnd = max(id.z1, other.gnd);
        }
    }
}
Debe ser más segura en todas las versiones de GM.
 
Los siguientes usuarios dieron las gracias a este tema: Ares074

Conectado Goganpis

Re:salto en plataforma 3d
« Respuesta #7 en: Abril 19, 2018, 11:43:48 pm »
Clamud no entendi este script
 

Desconectado Clamud

Re:salto en plataforma 3d
« Respuesta #8 en: Abril 22, 2018, 09:30:54 pm »
Cuando se utiliza with el código se ejecuta en todas las instancias del objeto indicado (en este caso obj_piso) y la instancia que inició el ciclo se convierte en other (en este caso other es el objeto jugador). Si una instancia de obj_piso toca al jugador y es la primera instancia en este ciclo, entonces se guarda su valor z1, pero si no es la primera instancia, su valor z1 se compara con el que ya se tiene guardado y solo se conserva el mayor de los dos (max).
 

Conectado Goganpis

Re:salto en plataforma 3d
« Respuesta #9 en: Abril 22, 2018, 10:55:50 pm »
Gracias no lo habia entendido xD.