Hola Amigos !! no creo que sea algo tan dificl de hacer, pero haber que tal, cuals soluciones me darían? quiero sus opiniones..
No hay mucho que explicar porque el titulo ya lo dice todo, pero por si acaso falta, aqui va.
- Hagamos ejemplo que estoy debajo de un objeto "movil" pero si salto desde abajo como es solido se pega y cae de nuevo, como harían ustedes para que pueda saltar desde abajo y solo pisarlo cuando caia sobre el?...
supongo que todos ya han jugado al "Contra - Juego de Nintendo" en mi pais reconocido como juego de Famili jaja bueno, ven que el salta de abajo del objeto hacia arriba de el? bueno eso, muchos han echo similares pero se trancan al caer por razones que no superan al objeto en altura y quedan errores... alguno la ha echo bien? comente su opinion, saludos !!
Tengo una idea de que este code que yo usé puede servir, esta accion va en "step" de el la plataforma a la cual quiero saltar.
STEP:
if y < obj_player.y
{solid = true;}
if y > obj_player.y
{solid = false;}
que dicen?
El problema de ese codigo es que solo va a soportar a tu jugador, ya que si otro objeto como un enemigo esta en ese momento cuando solid=false se va a caer :-[
Una idea es separa entre solidos y semisolidos, o sea un Colision para cada caso.
En el caso de semidoslidos hacer que la colision solo ocurra en los pies del jugador (usando collision_rectangle por ejemplo), y que solo ocurra cuando el jugador este cayendo y no este atravezando la plataforma.
Cita de: 3dgeminis en Mayo 09, 2015, 07:47:15 PM
El problema de ese codigo es que solo va a soportar a tu jugador, ya que si otro objeto como un enemigo esta en ese momento cuando solid=false se va a caer :-[
Una idea es separa entre solidos y semisolidos, o sea un Colision para cada caso.
En el caso de semidoslidos hacer que la colision solo ocurra en los pies del jugador (usando collision_rectangle por ejemplo), y que solo ocurra cuando el jugador este cayendo y no este atravezando la plataforma.
Hola, te acuerdas de mi? yo si de ti e.e (Nos conoceriamos por pura vista en temas :3 recuerdo tu avatar)
Pues bueno, basandome en tu respuesta de chekear cuando este cayendo supongo que es mas sencillo...
Cita de: damyrodriiguez en Mayo 09, 2015, 07:34:24 AM
Hola Amigos !! no creo que sea algo tan dificl de hacer, pero haber que tal, cuals soluciones me darían? quiero sus opiniones..
No hay mucho que explicar porque el titulo ya lo dice todo, pero por si acaso falta, aqui va.
- Hagamos ejemplo que estoy debajo de un objeto "movil" pero si salto desde abajo como es solido se pega y cae de nuevo, como harían ustedes para que pueda saltar desde abajo y solo pisarlo cuando caia sobre el?...
supongo que todos ya han jugado al "Contra - Juego de Nintendo" en mi pais reconocido como juego de Famili jaja bueno, ven que el salta de abajo del objeto hacia arriba de el? bueno eso, muchos han echo similares pero se trancan al caer por razones que no superan al objeto en altura y quedan errores... alguno la ha echo bien? comente su opinion, saludos !!
Tengo una idea de que este code que yo usé puede servir, esta accion va en "step" de el la plataforma a la cual quiero saltar.
STEP:
if y < obj_player.y
{solid = true;}
if y > obj_player.y
{solid = false;}
que dicen?
Eso de modificar el object no es bonito, como ya te aclararon arriba.
Actualmente estoy trabajando en un juego con ese sistema, te pondre los codigos que utilizo:
Step Event (Floor es el suelo)
if !place_meeting(x,y+1,Floor) and vspeed<=0
{gravity=0.2}
Colision con las plataformas (Me vale, yo nunca utilizo Solidos....)
if vspeed>=1
{vspeed=0 y=other.y gravity=0}
El salto pues, seria con vspeed-=5465484
Tendras que jugar un poco con la mascara y eso....
La cosa se pondria fea si piensas en hacerlo con otras direcciones (En lugar de gravedad arriba abajo....)
Aqui el juego por si deseas chekearlo (Asi es, vine a spamear soy un vandalo e.e)
http://www.emudesc.com/threads/elsword-digimon-rumble-arena-nose-u-u.589505/ (http://www.emudesc.com/threads/elsword-digimon-rumble-arena-nose-u-u.589505/)
jajaja no me a funcionado ._. mira puse los codigos que me diste asi.. haber..
Esto hise en el objeto Player..
STEP
if !place_meeting(x,y+1,obj_wall)
{gravity = 0.2}
y puse en el evento "collision" con el suelo este codigo:
{vspeed=0 y=other.y gravity = 0}
if vspeed >= 1
y falla igual, no queda bien como un plataforma, cae muy lento y atravieza igual ._. si lo puse mal a los codigos en el objeto.. dime cual xd
Cita de: damyrodriiguez en Mayo 10, 2015, 01:07:45 AM
jajaja no me a funcionado ._. mira puse los codigos que me diste asi.. haber..
Esto hise en el objeto Player..
STEP
if !place_meeting(x,y+1,obj_wall)
{gravity = 0.2}
y puse en el evento "collision" con el suelo este codigo:
{vspeed=0 y=other.y gravity = 0}
if vspeed >= 1
y falla igual, no queda bien como un plataforma, cae muy lento y atravieza igual ._. si lo puse mal a los codigos en el objeto.. dime cual xd
Tambien tendrias que jugar con el origin xD, como que no sirvio? nada hiso?
Por cierto, sospecho que copiaste y pegaste mal aqui o si no tiraria error o.O pero es raro que no te funcionara....
Jajaj pero dime, puse el codigo en algun evento mal o era asi que tu decias?
lo estoy probando con un cubo de 32x32 solo para ver si funciona.. y pasa eso :O
Cita de: damyrodriiguez en Mayo 10, 2015, 04:43:16 AM
Jajaj pero dime, puse el codigo en algun evento mal o era asi que tu decias?
lo estoy probando con un cubo de 32x32 solo para ver si funciona.. y pasa eso :O
Ok, te copiare todo el codigo que tengo (Quizas te ayude a conocer otros estilos xD)
Por cierto mi Collision Mask es de 8x8, el origin es de 4x8...
Create Event
animation_length=room_speed
animation_step=0
dt=0
r=0
Atack=0
Agumon()// Aqui ejecutara un codigo para cargar todos los models/sprites
Model=Stand
z=0
d=0
vel=0
runningB=0
runningB2=0
running=0
nextatack=0
side=0
sliding=0
Step Event
if keyboard_check_pressed(vk_lcontrol) if t=t_Agumon {Greymon() Model=Stand}
if Model!=Hurt
{if keyboard_check(vk_left) if place_free(x-vel,y) and !place_meeting(x-vel,y,Enemy) and x>=200 if Atack=0 {x-=vel d=180}
if keyboard_check(vk_right) if place_free(x+vel,y) and !place_meeting(x+vel,y,Enemy) if Atack=0 {x+=vel d=0}
if Model=Atack1 or Model=Atack2 or Model=Atack3 or Model=Atack4 or Model=Atack5
Atack=1 else Atack=0
if keyboard_check_pressed(vk_up) if place_meeting(x,y+2,Floor) {Model=Jump animation_step=0 vspeed=-JPow runningB2=0}
if keyboard_check_pressed(vk_down) if place_meeting(x,y+2,Platform) {Model=Jump animation_step=29 vspeed=1 runningB2=0 gravity=0.2 sliding=10}
if sliding!=0 sliding-=1
if runningB<=1 vel=vel1 else vel=vel2
if keyboard_check_pressed(vk_left) {runningB+=1 runningB2=0 if side=0 runningB=1 side=1}
if keyboard_check_pressed(vk_right) {runningB+=1 runningB2=0 if side=1 runningB=1 side=0}
if keyboard_check(vk_left) {if Model=Stand {Model=Walk animation_step=0} if runningB>=2 if Model=Stand or Model=Walk {Model=PreRun animation_step=0}}
if keyboard_check(vk_right) {if Model=Stand {Model=Walk animation_step=0} if runningB>=2 if Model=Stand or Model=Walk {Model=PreRun animation_step=0}}
if Model!=Stand runningB2=0
if runningB!=0 runningB2+=1 if runningB2>=15 {runningB=0 runningB2=0}
if !keyboard_check(vk_left) and !keyboard_check(vk_right) or keyboard_check(vk_left) and keyboard_check(vk_right) {if Model=Walk Model=Stand if Model=Run {Model=Stand runningB2=15}}
if !place_meeting(x,y+1,Floor) and vspeed<=0 //-----------------------------------------> Gravedad
{gravity=0.2 if Model!=Jump if Model!=Atack5 {Model=Jump animation_step=30}}
if vspeed>6 vspeed=6
if Model=Jump {if vspeed<0 animation_step=0 else if animation_step<=30 animation_step+=2}
if keyboard_check_pressed(ord("Z"))
{if Model=Stand or Model=Walk {Model=Atack1 animation_step=0}
if Model=Atack1 if animation_step>=15 and animation_step<=30 {nextatack=1}
if Model=Atack2 if animation_step>=15 and animation_step<=30 {nextatack=1}
if Model=Run {Model=Atack4 animation_step=0}
if Model=Jump and vspeed<=-1 {Model=Atack5 animation_step=0}}
if keyboard_check_pressed(ord("C"))
{if Model=Stand or Model=Walk {Model=Skill1 animation_step=0}}
if Model=Atack1 {vel=0 if d=0 {if place_free(x+A1S,y) and !place_meeting(x+A1S,y,Enemy) x+=A1S} else if place_free(x-A1S,y) and !place_meeting(x-A1S,y,Enemy) x-=A1S}
if Model=Atack2 {vel=0 if d=0 {if place_free(x+A2S,y) and !place_meeting(x+A2S,y,Enemy) x+=A2S} else if place_free(x-A2S,y) and !place_meeting(x-A2S,y,Enemy) x-=A2S}
if Model=Atack3 {vel=0 if d=0 {if place_free(x+A3S,y) and !place_meeting(x+A3S,y,Enemy) x+=A3S} else if place_free(x-A3S,y) and !place_meeting(x-A3S,y,Enemy) x-=A3S}
if Model=Atack4 {vel=0 if d=0 {if place_free(x+A4S,y) and !place_meeting(x+A4S,y,Enemy) x+=A4S} else if place_free(x-A4S,y) and !place_meeting(x-A4S,y,Enemy) x-=A4S}
if Model=Atack5 {vel=0 if d=0 {if place_free(x+A5S,y) and !place_meeting(x+A5S,y,Enemy) x+=A5S} else if place_free(x-A5S,y) and !place_meeting(x-A5S,y,Enemy) x-=A5S}
if animation_step>=30
{if Model=Atack1 and nextatack=1 {Model=Atack2 animation_step=0 nextatack=0}
if Model=Atack2 and nextatack=1 {Model=Atack3 animation_step=0 nextatack=0}}
if animation_step>=25 and animation_step<=35
{if Model=Atack1 or Model=Atack2 or Model=Atack3 or Model=Atack4 or Model=Atack5 {a=instance_create(x,y,Damage) a.owner=id a.fue=global.fue if d=180 a.lengh=-8 else a.lengh=8}}}
if Model=PreRun animation_step+=+5
if Model!=Jump animation_step+=+1
if Model=Atack1 animation_step+=+1
if Model=Atack2 animation_step+=+1
if Model=Atack3 animation_step+=+1
if Model=Atack4 animation_step+=+1
if Model=Atack5 animation_step+=+1
if Model=Skill1 animation_step+=+1
if Model=Hurt animation_step+=+3
if animation_step>=animation_length{
if Model=Atack1 Model=Stand
if Model=Atack2 Model=Stand
if Model=Atack3 Model=Stand
if Model=Atack4 Model=Stand
if Model=Atack5 Model=Jump
if Model=PreRun Model=Run
if Model=Hurt Model=Stand
if Model=Skill1 Model=Stand
if Model=Walk or Model=Run animation_step=4
else if Model!=Dead animation_step=0 else animation_step=animation_length}
Collision con Suelo
if vspeed>=1 and sliding=0
{vspeed=0 y=other.y gravity=0
if Model=Jump or Model=Atack5 {Model=Stand instance_create(x,y,LastSpot)}}
No modifique nada, asi esta en mi Game Maker.... Obvio modifique el que te di antes quitando el codigo "Basura" que no aplicaria en el tuyo...
La plataforma estaria en centerx0
Suerte
Te dejo un ejemplo, es bastante simple, con pocas lineas de codigo y facil de usar, ademas le puse algunos comentarios de lo que hace cada parte.
Cita de: 3dgeminis en Mayo 10, 2015, 06:18:37 AM
Te dejo un ejemplo, es bastante simple, con pocas lineas de codigo y facil de usar, ademas le puse algunos comentarios de lo que hace cada parte.
-Gracias 3dgeminis, me sirvio, use tu mismo example para probarlo a mi manera y aun asi funciona de 10... solamente que te falto ponerle que no pueda saltar si no esta colisionando con el piso jajaja utilizando tu manera de programar en ese codigo, que pondrias?
if keyboard_check(vk_up) Y que mas? porque los objetos no son solidos, por eso no puedo usar el check_collision ni el otro, porque son para solid, a tu manera como sería, con esto y ya esta!
Cita de: damyrodriiguez en Mayo 10, 2015, 11:54:17 AM
Cita de: 3dgeminis en Mayo 10, 2015, 06:18:37 AM
Te dejo un ejemplo, es bastante simple, con pocas lineas de codigo y facil de usar, ademas le puse algunos comentarios de lo que hace cada parte.
-Gracias 3dgeminis, me sirvio, use tu mismo example para probarlo a mi manera y aun asi funciona de 10... solamente que te falto ponerle que no pueda saltar si no esta colisionando con el piso jajaja utilizando tu manera de programar en ese codigo, que pondrias?
if keyboard_check(vk_up) Y que mas? porque los objetos no son solidos, por eso no puedo usar el check_collision ni el otro, porque son para solid, a tu manera como sería, con esto y ya esta!
STEALING RESPUEST LIKE A BOSS
if keyboard_check_pressed(vk_up) and place_meeting(x,y+2,suelo) {vspeed=-10}
No queria irme a lo inutil xD
Jajaa Gracias!! hise eso que pusiste y me funcionó, pero necesitaba para el suelo y la plataforma.. y lo hise asi
if keyboard_check_pressed(vk_up) and place_meeting(x,y+2,suelo) {vspeed=-10}
(es para el suelo principal)
y hise este
if keyboard_check_pressed(vk_up) and place_meeting(x,y+2,plataforma) and vspeed = 0 {vspeed=-10}
para la plataforma (: sabes porque puse despues de place_meeting otro "and" ? y un vspeed? porque sino fallaba jajaja pero ya esta! Gracias a Todos