buenos dias,
hace meses me aventure a crear un juego con game maker y cada vez voy pillando mas, voy solucionando los problemas a mesura que van saliendo a base de videos, pruebas y como no, de leer este foro , pero hay uno que no consigo.
El juego es de plataforma y lo que quiero conseguir es: cuando el personaje esta corriendo, al presionar Z este se pare, cambie el sprite a disparo y cree el objeto bala! (tipo juego ghost and goblins)
lo que me ocurre es que si corre y aprieto z, no dispara sigue corriendo, pero si esta parado o saltando si que cambia el sprite y dispara.
Muchas gracias por adelantado!
Gran comunidad!
Salud!
El código sería algo como:
hspeed=0
sprite_index=ataque
instance_create(x,y,Bala)
Si no pasa nada si estas moviéndote deduzco que tienes un condicional que obligas a que hspeed=0 para poder atacar...
¿Podrías mostrarnos el código que usas para que al pulsar 'z' atacar?
gracais por responder,
Lo que tengo es esto:
if keyboard_check(ord('z'))
if (sprite_index = spr_jugador_anda_derecha)=true
{instance_create(x+0,y+0,obj_bala);
sound_play(snd_bang);
action_sprite_set(spr_dispara_derecha,0,0.4)}
Para empezar, como x+0=x, puedes ahorrarte poner ese "+0" ¿sabes?
También te puedes ahorrar en el if el "=true". Con el if (sprite_index == spr_jugador_anda_derecha) es suficiente.
Vas a tener que aprender a pulir ese código... ;)
spr_jugador_anda_derecha tiene que ser el sprite que usas para correr o la condición del segundo if nunca va a ser verdadera cuando corre. Si quieres que dispare tanto si corre como si está quieto y usas sprites distintos para estas acciones, tienes que modificar el código del if así:
if (sprite_index = spr_jugador_anda_derecha or sprite_index = spr_jugador_corre_derecha)
gracias por intentar ayudar,
pero como me temia no sera tan facil solucionarlo :'(
creo que desistire y en este juego dejare que solo dispare cuando esta quieto, ya que no consigo que al apretar z este se detenga y dispare a la vez!
Gracais de todas formas!
No me voy a dar por vencido XD !!
con vuestra ayuda he conseguido que dispare mientras corre!
pero no me cambia el sprite Y tampoco se detiene!
solo me falta que se pare al disparar y cambie al sprite!
el codigo lo he pulido (he empiezo a ver!)
codigo:
if (sprite_index = spr_jugadorderecho or sprite_index = spr_andaderecha)
{
instance_create(x,y,obj_chuchillo_derecha);
sound_play(cuchillo);
sprite_index=spr_jugador_dispara_dercha;
image_index=-1;
image_speed=0.4;
}
gracias nuevamente!
Yo te animaría a que reescribieras todo el código, ya que se puede pulir más. Entiendo lo que estás intentando hacer porque vas comenzando con GML y es natural la ruta que vas tomando, pero por ejemplo, no tiene caso tener un sprite spr_jugador_dispara_dercha o spr_jugadorderecho, y luego tener su contraparte izquierda. Sólo necesitas un sprite para cada acción, ya que mediante GML cualquier sprite se puede invertir horizontalmente ("espejear") mediante image_xscale = -1.
Cuando el usuario tiener varios estados o acciones, es mejor usar variables, constantes o una mezcla de ambas para determinar la accicón actual del jugador. Este método resulta en un código más organizado y con más lógica. Por ejemplo, el if usa dos condiciones, y eso es para el caso derecha, y luego si se quiere analizar el caso de la izquierda, se requerirían otras dos condiciones, en cambio, si se usa una variable o estado, sólo se tiene que preguntar "se está corriendo" o "el estado actual es corriendo" y esto serviría para el caso izquierda/derecha
En el código que has puesto, no hay nada que haga que el jugador se detenga (hacer cero la velocidad o desactivar la lectura de teclas o hacer 0 el incremento en X) . Tampoco entiendo por qué usas un image_index = -1, cuando en un sprite no existe ningún frame/subimagen igual a -1
Buenas nuevamente!
He seguido avanzando con el juego en el aspecto visual, y he vuelto a la programación!
vuelvo a insistir y no hay manera compañeros!
¿no sabeis ningun codigo para que al presionar la tecla Z el objeto jugador se quede quieto y dispare?
lo he provado de mil maneras buscado y rebuscado y no encuentro nada!
haber si alguien me muestra la luz!
Mil gracias por adelantado!
Mira, lo que recomiendo es que dividas el código en "partes". O sea, si vas a repetir el mismo código de disparar en muchas partes, haz un script con ese código y solo llámalo cuando sea necesario.
Si lo que quieres es que el personaje se detenga al presionar la tecla 'Z', cambia la variable hspeed a 0
hspeed=0;
sprite_index = spr_jugador_anda_derecha; //según sea el caso
scr_disparar(); //El script que contiene el código para disparar
El código para disparar deduzco que sería algo como el siguiente:
scr_disparar()
if (sprite_index = spr_jugador_anda_derecha)
{
instance_create(x,y,obj_bala);
sound_play(snd_bang);
action_sprite_set(spr_dispara_derecha,0,0.4)
}
else
{
instance_create(x,y,obj_bala);
sound_play(snd_bang);
action_sprite_set(spr_dispara_izquierda,0,0.4)
}
Muchas gracias Knd144!
En cuanto pueda me pongo a probar!
Ya comentare si me funciono ;D
alomejor es que no usa hspeed sino que mueve la x directamente? de ser asi, se me ocurre encerrar la parte que hace que se mva, en un "if sprite_index != spr_disparando {...}"
me explico?
Buenas,
Lo he probado y el hspeed no me sirve, he deducido que al moverme con D&D con jump to posicion no vale; exactamenteo lo que dice kostra! si me lo pudieras explicar mejor ;) encantado!
Lo que si conseguimos es que cambie el sprite, pero solo me corre una imagen no todo el sprite entero de 6 imagenes!
gracias por las respuestas!