Bien, estoy aprendiendo con el Game Maker ya que se me ocurrió una idea para un juego y me gustaría llevarla a cabo. Actualmente solo estoy haciendo tutoriales y mierdecillas, pero hay una cosa que no he encontrado.
Vereis, tengo un personaje que da patadas. Bien, tengo el sprite del personaje quieto mirando a la derecha, quieto mirando a la izquierda y moviendose para ambos lados, pero ahora... ¿Como hago que de una patada para la derecha si está mirando a la derecha o a la izquierda si esta mirando a la izquierda?
No se si me explico XD
Tengo los sprites para las patadas para ambos lados, pero por ejemplo si pongo que de la patada pulsando en intro le tengo que meter un sprite, que será de derecha o de izquierda, por lo que este mirando hacia donde sea y tengo el sprite de la patada a la derecha, dará la patada hacia la derecha (obviamente)

He probado a hacerlo con "Change Instance". Vamos, hacer un objeto personaje que solo se mueva para la derecha y todas sus acciones sean para la derecha, y otro igual para la izquierda.
Entonces cuando en el de la derecha pulso "Izquierda" se activa el "Change Instance" que hace que el Objeto pase al personaje moviendose hacia la izquierda.
Lo que pasa es que cuando le doy al boton no es fluido. Osea, tengo que darle dos veces a izquierda para que el personaje ande. Si solo le doy una y lo dejo presionado el personaje mira a la izquierda pero no se mueve.

Joder, es jodido de explicar.
Si no se me entiende pero alguno cree que puede ayudarme que me lo diga y subo un video o algo xD

PD: Me presento y tal. Soy Andrés, 20 años, de Murcia. Alep. Me vereis más por aqui, eso seguro  @_@

#1 Febrero 17, 2014, 08:11:17 PM Ultima modificación: Febrero 17, 2014, 08:13:33 PM por DarkKRuleR
Prueba un solo objeto, usa SÓLO SPRITES MIRANDO A LA DERECHA.
Aquí viene el truco: la variable image_xscale de todo objeto es 1 por defecto. Si pones image_xscale = -1, el objeto mirará a la izquierda (si el sprite original miraba a la derecha).
Así, teniendo el sprite parado, al hacer la patada cambia el sprite al de la patada (sprite_index = ...), al acabar la patada cambia otra vez a parado, al pulsar para moverse, cambia a corriendo... PERO SIN DIRECCION. TODOS MIRAN A LA DERECHA (sprPersonajeQuieto, sprPersonajePatada, sprPersonajeCorriendo..).

Ahora, haz que cuando des a correr a la derecha, pones image_xscale = 1, y al correr a la izquierda, image_xscale = -1. Con eso debería irte todo de lujo, cualquier duda pregunta. Verás que la variable image_xscale es genial y te ahorras tener que duplicar sprites :D

Cita de: DarkKRuleR en Febrero 17, 2014, 08:11:17 PM
Prueba un solo objeto, usa SÓLO SPRITES MIRANDO A LA DERECHA.
Aquí viene el truco: la variable image_xscale de todo objeto es 1 por defecto. Si pones image_xscale = -1, el objeto mirará a la izquierda (si el sprite original miraba a la derecha).
Así, teniendo el sprite parado, al hacer la patada cambia el sprite al de la patada (sprite_index = ...), al acabar la patada cambia otra vez a parado, al pulsar para moverse, cambia a corriendo... PERO SIN DIRECCION. TODOS MIRAN A LA DERECHA (sprPersonajeQuieto, sprPersonajePatada, sprPersonajeCorriendo..).

Ahora, haz que cuando des a correr a la derecha, pones image_xscale = 1, y al correr a la izquierda, image_xscale = -1. Con eso debería irte todo de lujo, cualquier duda pregunta. Verás que la variable image_xscale es genial y te ahorras tener que duplicar sprites :D

Vale, funciona genial lo de xsclae. Menos mal que me dio por preguntar, si no me veo juntandome inutilmente con cientos de sprites :)
Peeeeeeeeeeeeeero (siempre hay un pero) sigue sin ser fluido. Si me muevo para la derecha, paro y quiero moverme a la izquierda el personaje mira a la izquierda, pero no avanza a la izquierda a no ser que le de de nuevo >.<

¿Sabes como areeglarlo, oh, mi salvador?  :D

Aqui tienes la forma de hacerlo D&D, prueba haver si no te da el problema de la fluidez

1.- Un "Test Variable" que se encuentra en la pestaña "Control" con los siguientes parámetros:
Variable: sprite_index
value: jugador_mirando_derecha                                  <----- Esto se cambia por el nombre del sprite del jugador mirando a la derecha
y lo demás lo dejas como esta.
2.-Ahora pones un "change sprite" que se encuentra en "Main 1" con los siguientes parámetros:
sprite: Sprite del personaje pegando la patada a la derecha
lo demás lo dejas tal cual
3.-Ahora pones un "else" que se encuentra en la pestaña "Control"
4.-Ahora pones un change sprite igual que antes pero con el sprite del jugador pegando a la izquierda

Listo este evento hará que el persona pegue una patada cuando el jugador presiona la tecla que haz definido en el evento "Keyboard Press"

Ahora resta hacer que el personaje deje de dar la patada, esto se aria con un alarm pero creo que es muy avanzado para alguien nuevo y mejor agamoslo con un key release, pones un evento "key release" con la misma tecla con la que pegas la patada y pones los siguiente

1.-Un "Test Variable"  con los siguientes parámetros:
variable: sprite_index
value: jugador_patada_derecha                       <----- Esto se cambia por el nombre del sprite del jugador pegando la parada a la derecha
y lo demas lo dejas como esta.
2.- ahora pones un "change sprite" con los siguientes parámetros:
sprite: Sprite del personaje mirando a la derecha
lo demas lo dejas tal cual esta
3.- ahora pones un else
4.- ahora pones un "change sprite" con los siguientes parámetros:
sprite: Sprite del personaje mirando a la izquierda

Eso es todo esto hará que el cuando el usuario presione la tecla que ayas definido para la patada, pegue una patada en la dirección del sprite actual y cuando suelte el botón el personaje volverá a la normalidad :D eso es todo bye e.e

Cita de: 7sixerCF en Febrero 17, 2014, 08:53:47 PM...

Con la patada no tengo problema, la da bien. Lo hice con 1 objeto patada, y con el Change Instance al pulsar un botón. Luego esperar que termine la animación y entonces volver al personaje estatico.

Parece que he encontrado el problema de la fluidez que nombraba arriba. Surge por ejemplo al pulsar derecha y luego SIN coltar derecha pulsar izquierda. El personaje se mueve a la izquierda pero si sueltas derecha el personaje se para. Ahora mismo no me supone un gran problema, ya que si pulsas las teclas por separado va bien XD

Haz algo así como..

[gml]if (keyboard_check(vk_right)) ...
else if (keyboard_check(vk_left))...[/gml]

la idea es que si pulsa ambas direcciones NO HACE NADA, sólo al pulsar una. De lo contrario siempre suceden estos errores raros, a todos nos pasa :)

Cita de: DarkKRuleR en Febrero 17, 2014, 10:12:25 PM
Haz algo así como..

[gml]if (keyboard_check(vk_right)) ...
else if (keyboard_check(vk_left))...[/gml]

la idea es que si pulsa ambas direcciones NO HACE NADA, sólo al pulsar una. De lo contrario siempre suceden estos errores raros, a todos nos pasa :)

¿Pero eso dónde lo pongo? En cada una de los eventos de movimiento?  Y, ¿tendría que poner algo más?

En aquel sitio donde hagas mover el personaje a un lado al pulsar una tecla, chequea que no pulsas la contraria