Estoy aprendiendo a programar y estoy haciendo un pequeño juego de plataformas para practicar y tal, pero tengo un problema y es que, no consigo hacer que el personaje salte con la animación de salto. Tengo 3 bloques en step que son los y uno en create con lo sig comandos siguientes:
CREATE
mov = 0
v = 4;
vv = 0;
vh = 0;
vsalto = -10
STEP
Declarar Movimiento
der = keyboard_check(ord ("D"))
izq = -keyboard_check(ord ("A"))
salto = keyboard_check_pressed(ord("W"))
mov = der + izq
vh = v * mov
Velocidad Vertical
///Gravedad
if (vv < 30) && !place_meeting(x,y+1,object1){
vv=vv+1
}
//Detecta la colisión con el suelo
if (place_meeting(x,y+vv,object1)){
while(!place_meeting(x,y+sign(vv),object1 )){
y = y + sign(vv)}
vv = 0
}
//salto
if (place_meeting(x,y+1,object1)&& salto){
vv = vsalto
}
//Declara el movimiento vertical a la y
y = y + vv
Velocidad horizontal
///Colisión horizontal
if place_meeting(x + vh,y,object1){
while(!place_meeting(x+sign(vh),y,object1 )){
x = x + sign(vh)
}
vh = 0
}
//Animación horizontal
if vh == +4{
image_xscale = 1
sprite_index = spr_andando
image_speed = 0.3}
if vh == 0{
sprite_index = sprite0
image_speed = 0.5
}
if vh == -4{
image_xscale = -1
sprite_index = spr_andando
image_speed = 0.3
}
///Estableciendo variables
x = x + vh; ///x tendra el valor de vh
Aclarar que sprite0 es el spite en el que esta el personaje parado y el sprite1 es el bloque.
Podrias crear una nueva variable que controle cuando se esta colisionando o no con el suelo, y usarla en conjunto con otras variables para cambiar de sprites.
Si es falsa esta en el aire y cambias al sprite correspondiente, y si es verdadera usas los sprites para cuando esta quieto y caminando (dependiendo del valor de mov)
Cita de: 3dgeminis en Noviembre 03, 2018, 06:43:49 PM
Podrias crear una nueva variable que controle cuando se esta colisionando o no con el suelo, y usarla en conjunto con otras variables para cambiar de sprites.
Si es falsa esta en el aire y cambias al sprite correspondiente, y si es verdadera usas los sprites para cuando esta quieto y caminando (dependiendo del valor de mov)
He intentado como buenamente he podido lo de la variable, pero que va, no soy capaz de sacarlo (ya te digo estoy aprendiendo y se me escapan muchas cosas)
al cambiar el sprite_index cambias su raiz, al cambiar la subimagen haces una animacion, la variable image_index que por hecho es la que por predeterminado tiene el draw_self() es sumada por cada paso con image_speed la cual varia segun vos, ejemplo en 30 pasos hay un sprite del personaje moviendose con 5 imagenes en la animacion, el puesto que es que comienza en 1, la velocidad normal es 1, las imagenes que aumenta (image_index += image_speed pero no se muestra) si esta en 2 se salta una imagen y no te das cuenta a veces, como para detenerla la colocas en 0 ya que 1+0 = 1 (image_index += image_speed)... No se a que te referis con el control de animaciones primero controla todo tu codigo en mecanica del juego luego ajusta la animacion no querras darle un nuevo toque y tendras que empezar de nuevo ;D
el problema es copier el codigo de algun lado sin entenderlo primero, he visto ese formato de codigo para plataformas en muchos lados, si lo copiaste de la seccion de scripts tiene muchos bugs, yo lo implemente y me funciono, luego que regrese del trabajo posteo como lo deje para que veas donde va la animacion de salto, recuerdo que cuando se esta en el aire o no se esta tocando el bloque o la pared cada step se debe de poner la animacion de salto, en mi caso yo solo checo eso 1 sola vez, ya que si esta en el aire y lo cambio no tiene caso Volver a cambiarlo o setearlo de nuevo mientras sigo en el aire.
Intenta con este y avísame su funcionamiento.
donde object1 es el suelo y/o la pared
[EVENT CREATE]
s=0;
[EVENT STEP]
b2=keyboard_check(38)
if(b2*(s=0)*place_meeting(x,y+10,object1))s=20
if(s)s-=1
vs=10-s
while(place_meeting(x,y+vs,object1))vs-=1*sign(vs)
y+=vs