Hola, buenas :)
tratare de ser lo mas corto posible con mi explicación pero suelo escribir mucho... tengo un problema con el cambio de sprites de mi personaje.
Les dejare un Gif del resultado final que quiero conseguir, es de un juego que se llama Dead Maze, recomendado.
apenas ando comenzando con el movimiento del personaje pero me estanque con el cambio de sprites con este codigo:
[gml]
if(keyboard_check(ord("D")))
{
x += 5
sprite_index = spr_c_der
image_speed = 0.5
}
else
{
sprite_index = spr_der
}
[/gml]
todo funciona bien, pero únicamente para cuando el personaje se mueve hacia la derecha, cambia bien su sprite al de caminar y luego al soltar la tecla D cambia su sprite al sprite parado viendo a la derecha... el problema viene cuando pongo lo mismo pero para la izquierda:
[gml]
if(keyboard_check(ord("D")))
{
x += 5
sprite_index = spr_c_der
image_speed = 0.5
}
else
{
sprite_index = spr_der
}
if(keyboard_check(ord("A")))
{
x -= 5
sprite_index = spr_c_iz
image_speed = 0.5
}
else
{
sprite_index = spr_iz
}
[/gml]
como el else del primer if ya dice que si no estoy apretando la tecla D cambiara el sprite al de spr_der (el de mirar a la derecha) entonces tiene conflictos para el segundo else porque pone una condición parecida pero mirando a la izquierda, esto hace que aunque yo apreté la tecla D al no estarse presionando la tecla A el sprite sea el de mirar a la izquierda y lo mismo para cuando apretó la tecla D... se cual es el problema pero no le consigo solución.
¿me ayudan a solucionar esto? también se que luego tendré el mismo problema para cuando vaya a mover el personaje para las direcciones diagonales ya que quiero que se mantenga el sprite de correr ya sea izquierda o derecha asi como en el Gif.
no pido que me arreglen todo el código(tampoco es que sea mucho ya que esta super básico), si solamente me dicen de que forma debo pensar para solucionarlo es mejor para mi ya que asi busco la manera de aplicar eso a código.
====
por cierto conseguí un tema donde hablan de algo muy parecido pero no es exactamente mi problema, espero no infligir ninguna regla.
pregunta extra ¿que tan feo se ve que alguien use el drag and drop y a la vez código? es que hay cosas que no se bien como aplicar en código y utilizo eso.
Muchas gracias por tomarte el tiempo de leer mi testamento 8)
Sí, lo que intentas hacer se complica porque requieres de diferentes comportamientos para el personaje al estar parado, o caminando.
Por lo que se necesita una forma de detectar los distintos estados. Una forma sencilla es que le crees variables al jugador, en este caso te recomiendo dos: "mira" y "camina"
"mira" para detectar el lado al que está mirando el jugador
"camina" para detectar si está caminando o no
en el Create
[gml]
mira = 1; // 1- Derecha 0- Izquierda
camina = false; // false- está quieto true- está caminando
[/gml]
en el Step
[gml]
//se asignan los sprites si camina o no, y donde mira------------
if camina == false
{
if mira == 1
{
sprite_index = spr_der;
}
else
{
sprite_index = spr_iz;
}
}
else
{
if mira == 1
{
sprite_index = spr_c_der;
}
else
{
sprite_index = spr_c_iz;
}
}
[/gml]
Como ves, se detecta que no está caminando para luego asignar el sprite de quieto según a donde está mirando. Y lo mismo para el caso de cuando sí camina.
Y ahora este código
[gml]
//Movimiento del personaje--------------------
if (keyboard_check(ord("D")))
{
camina = true;
mira = 1;
x += 5;
image_speed = 0.5;
}
if (keyboard_check(ord("A")))
{
camina = true;
mira = 0;
x -= 5;
image_speed = 0.5;
}
if (keyboard_check_released(ord("D")))
{
camina = false;
}
if (keyboard_check_released(ord("A")))
{
camina = false;
}
[/gml]
Primero cuando se presionan las teclas, mira se vuelve derecha o izquierda según corresponda, y camina se vuelve true para saber que ya cambió de estado.
Y por último al soltar las teclas, camina vuelve a false para volver al estado quieto.
Y luego puedes hacer lo mismo para el movimiento vertical pero usando la "Y"... y sin agregar la variable "mira" porque no es válida para el movimiento vertical, eso te lo dejo a ti.
Y a tu pregunta sobre mezclar el drag drop con código, más que feo es que no es buena idea. El drag & drop es muy limitado y poco flexible, pero lo más importante es que si no sabes muy bien el código que estos bloques usan, podrías estar cambiando variables u otras cosas sin que te enteres, y más avanzado te podrías encontrar con errores inexplicables. Siempre intenta poco a poco ir desprendiéndote de eso, con el código todo se puede hacer.
Yo uso 2 variables, una para saber a donde mira, y otra si se mueve o no.
Para controlar la primera uso la funcion keyboard_check_pressed (0=izquierda 1=derecha)
Para la segunda uso keyboard_check, cuando no se presiona ninguna tecla, derecha y izquierda, la variable es 0, cuando se esta presionando derecha o izquierda la variable es 1.
Luego uso las 2 variables para controlar el cambio de sprites.
Por ejemplo llamemos a las variables mirar y mover respectivamante, si mirar=0 y mover=0, el sprite deberia ser quieto mirando a la izquierda, si mirar=0 y mover=1, el sprite deberia se caminar hacia la izquierda. Y asi con todas las combinaciones.
getnoff y 3dgeminis Gracias a ustedes ya conseguí exactamente el movimiento que buscaba :)