Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: xas en Septiembre 02, 2015, 09:52:39 AM

Título: juego plataforma
Publicado por: xas en Septiembre 02, 2015, 09:52:39 AM
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!
Título: Re:juego plataforma
Publicado por: Marth en Septiembre 02, 2015, 11:07:19 AM
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?
Título: Re:juego plataforma
Publicado por: xas en Septiembre 02, 2015, 12:08:52 PM
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)}
Título: Re:juego plataforma
Publicado por: Marth en Septiembre 02, 2015, 01:54:48 PM
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... ;)
Título: Re:juego plataforma
Publicado por: Guacusio en Septiembre 02, 2015, 02:03:26 PM
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)

Título: Re:juego plataforma
Publicado por: xas en Septiembre 02, 2015, 02:46:57 PM
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!
Título: Re:juego plataforma
Publicado por: xas en Septiembre 03, 2015, 10:00:56 AM
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!
Título: Re:juego plataforma
Publicado por: penumbra en Septiembre 03, 2015, 10:34:10 AM
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
Título: Re:juego plataforma
Publicado por: xas en Septiembre 12, 2015, 06:41:42 PM
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!

Título: Re:juego plataforma
Publicado por: knd144 en Septiembre 12, 2015, 09:06:40 PM
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)
}
Título: Re:juego plataforma
Publicado por: xas en Septiembre 13, 2015, 10:25:05 AM
Muchas gracias Knd144!
En cuanto pueda me pongo a probar!
Ya comentare si me funciono ;D
Título: Re:juego plataforma
Publicado por: kostra en Septiembre 13, 2015, 01:15:20 PM
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?
Título: Re:juego plataforma
Publicado por: xas en Septiembre 13, 2015, 04:54:23 PM
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!