Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: the_blade en Octubre 30, 2011, 06:04:02 AM

Título: shooter isometrico
Publicado por: the_blade en Octubre 30, 2011, 06:04:02 AM
Hola mi consulta es la siguiente quiero hacer un shooter isometrico, osea tipo un top down shooter pero con la diferencia que el personajes se ve en vista isometrica (todo el cuerpo completo) en lugar de verse desde arriba. Como hago para que se mueva usando las teclas a,s,d,w cambiando de sprites y que la mira sea limitada, osea que no se pueda apoyar la mira encima del personaje sino que solo nos deje moverla a unos milimetros de nosotros, osea digo porq si quiero moverme y apoyo la mira encima del personaje se producen errores en la animacion porque el personaje no sabe para donde ir, o sino como soluciono ese problema, quiero que se mueva bien y reprodusca las animaciones por ejemplo de correr y de disparar en las 8 direcciones sin problemas como para que se juegue comodo, si alguien me facilita alguno codigo que lo explique aunq no tenga graficos no importa me serviria muchisimo. desde ya gracias.-
Título: Re: shooter isometrico
Publicado por: MaanuRP en Octubre 30, 2011, 03:18:12 PM
Un consejo, explica mejor y mas definidas cuales son tus dudas. Por lo que yo entendi quieres el juego ya hecho xD

Esta es la seccion de Preguntas y Respuestas. Te convendria poner de titulo la duda que tienes, y en el cuerpo del mensaje dar una breve descripcion de tu problema, con abajo la pregunta.

No te se responder por la forma en que escribiste, edita el tema y escribe nuevamente, de titulo pon tu duda o tu problema, y debajo una breve descripcion. Sino, por lo menos yo, no se como ayudarte.
Título: Re: shooter isometrico
Publicado por: elviskelley en Octubre 31, 2011, 04:24:41 PM
Codigo de movimiento en 8 direcctiones

Event step
//movimiento
if keyboard_check(ord("A")) and keyboard_check(ord("W")) //diagola arriba isquierda
{direction=135; speed=5; image_speed=0.5; sprite_index=sprPlayer135; exit;}
else
if keyboard_check(ord("A")) and keyboard_check(ord("S")) //diagonal abajo izquierda
{direction=225; speed=5; image_speed=0.5;  sprite_index=sprPlayer225; exit;}
else
if keyboard_check(ord("D")) and keyboard_check(ord("W")) //diagonal arriba derecha
{direction=45; speed=5; image_speed=0.5;  sprite_index=sprPlayer45; exit;}
else
if keyboard_check(ord("D")) and keyboard_check(ord("S")) //diagonal abajo derecha
{direction=305; speed=5; image_speed=0.5;  sprite_index=sprPlayer305; exit;}
else
if keyboard_check(ord("D")) //derecha
{direction=0; speed=5; image_speed=0.5;  sprite_index=sprPlayerDer; exit;}
else
if keyboard_check(ord("A")) //izquierda
{direction=180; speed=5; image_speed=0.5;  sprite_index=sprPlayerIzq; exit;}
else
if keyboard_check(ord("W")) //arriba
{direction=90; speed=5; image_speed=0.5; sprite_index=sprPlayerArb; exit;}
else
if keyboard_check(ord("S")) //abajo
{direction=270; speed=5; image_speed=0.5;  sprite_index=sprPlayerAbj; exit;}
else
if keyboard_check_released(vk_anykey) //que se detenga.
{speed=0; image_speed=0;}

Título: Re: shooter isometrico
Publicado por: the_blade en Noviembre 05, 2011, 12:41:35 PM
hola quisas no me supe explicar bien, el juego es isometrico 2d, el estilo accion, shooter, se maneja con las teclas A (izquierda),S(abajo),D(derecha),W(arriba), con estas teclas se mueve al personaje principal en ocho direcciones, reproduciendo la animacion de correr en cada caso y si no se pulsa ninguna  tecla quedaria reprociendo una peque?a animacion de cuando esta descansando parado, ahora para disparar se utiliza el mouse (boton izquierdo). al pulsar el boton mediante el siguiente codigo:
direction=point_distance(x,y, . . . . .mouse_x, mouse_y) el personaje dispara en la direccion en la que se halla el mouse y la imagen cambia de acuerdo a la direccion de este, ahora el problema es que si estoy corriendo y pulso click derecho del mouse lo que me hace es se gira y dispara en esa direccion y no puedo seguir corriendo hasta que no dejo de disparar. como puedo hacer para que si estoy corriendo y disparo, dispare reproduciendo la animacion y avanzando de acuerdo a la direccion de las teclas y no a la del mouse y que solo cuando se esta parado me habilite el disparo mas preciso con el mouse osea que si estoy parado y pulso disparar se gira acorde a la direccion del mouse y dispara y de lo contrario si estoy corriendo dispara en la direccion de las teclas que se pulse, POR EJEMPLO SI PULSO LA TECLA D(DERECHA) Y ESTA CORRIENDO EN ESA DIRECCION AL DISPARAR VA A SALIR EL DISPARO HACIA LA DERECHA. O si alguien me puede decir alguna forma mas comoda y simple del personaje. agradesco sujerencias. (NOTA LOS SPRITES SON DE CUERPO COMPLETO EN LAS 8 DIRECCIONES Y NO POSEE ROTACION DE CADERA).-
Título: Re: shooter isometrico
Publicado por: Mgbu en Noviembre 05, 2011, 02:03:04 PM
Deberias hacerlo vos, no elviskelley  ;)
Si no puedes haz un juego mas facil (Mgbu's method  XD)
Título: Re: shooter isometrico
Publicado por: elviskelley en Noviembre 05, 2011, 02:39:46 PM
si te fijaste arriba el cogigo que coloque es para moverte y cambiar la animacion en 8 direcciones con las teclas A,S,D,W como lo pediste, lo de que dispare en alguna en direccion al mouse y se mueva en la direccion asignada te daria como resultado que camine de costado de lado mientras dispara al objectivo. Pero si eso quieres, es basicamente los mismo al codigo de arriba solo que las comparaciones son a posicion del mouse para el cambio de sprite, te dejare el codigo, solo debera cambia donde dice sprite_index=... pones tus sprites.

Codigo completo va en el event End step
Citar
//movimiento
if keyboard_check(ord("A")) and keyboard_check(ord("W")) //diagola arriba isquierda
{direction=135; speed=5;  exit;}
else
if keyboard_check(ord("A")) and keyboard_check(ord("S")) //diagonal abajo izquierda
{direction=225; speed=5;  exit;}
else
if keyboard_check(ord("D")) and keyboard_check(ord("W")) //diagonal arriba derecha
{direction=45; speed=5;  exit;}
else
if keyboard_check(ord("D")) and keyboard_check(ord("S")) //diagonal abajo derecha
{direction=305; speed=5;  exit;}
else
if keyboard_check(ord("D")) //derecha
{direction=0; speed=5; exit;}
else
if keyboard_check(ord("A")) //izquierda
{direction=180; speed=5; exit;}
else
if keyboard_check(ord("W")) //arriba
{direction=90; speed=5;  exit;}
else
if keyboard_check(ord("S")) //abajo
{direction=270; speed=5;  exit;}
else
if keyboard_check_released(vk_anykey) //que se detenga.
{speed=0; image_speed=0;}
//cambia el speed= por la velocidad de movimiento que quieres


//cambio de sprite segun posicion del mouse.
if (x < mouse_x) and (y < mouse_y) //diagonal abajo derecha
{ image_speed=0.3;  sprite_index=sprCpu305; exit;}
else
if (x > mouse_x) and (y < mouse_y) //diagonal abjo izq
{ image_speed=0.3;  sprite_index=sprCpu225; exit;}
else
if (x < mouse_x) and (y > mouse_y) //diagonal arriba derecha
{image_speed=0.3;  sprite_index=sprCpu45; exit;}
else
if (x > mouse_x) and (y > mouse_y) //diagonal abjo izq
{image_speed=0.3;  sprite_index=sprCpu135; exit;}
else
if (x > mouse_x) //izq
{image_speed=0.3; sprite_index=sprCpuIzq; exit;}
else
if (x < mouse_x) //Derecha
{image_speed=0.3; sprite_index=sprCpuDer; exit;}
else
if (y > mouse_y) //arriba
{image_speed=0.3; sprite_index=sprCpuUp; exit;}
else
if (y < mouse_y) //abajo
{image_speed=0.3; sprite_index=sprCpuAbj; exit;}
/*cambia el image_speed por la que necesites eso es el cambio de subimagenes
y cambia donde dice sprite_index= aca tu sprite.
recuerda los grados son  derecha=0 arriba=90 izquierda=180 abajo=270 para que tengas una quia
del sprite a usar.
con esto cambia sprite segun donde este posicionado el mouse en 8 direcciones
y con las teclas a,s,d,w, mueves al personaje.
Título: Re: shooter isometrico
Publicado por: the_blade en Noviembre 08, 2011, 07:26:55 AM
gracias elviskeley por el codigo. lo voy a probar.- un abrazo
Título: Re: shooter isometrico (modificando modo de juego)
Publicado por: the_blade en Noviembre 15, 2011, 06:36:13 PM
hola elviskeley te agradesco mucho el codigo la verdad lo probe y va joya, lo que si si bien el personaje se mueve en las ocho direcciones no he podido a pesar de que probe muchas alternativas conseguir un modo codo de juego, mi idea seria que te puedas mover con las teclas en las ocho direcciones tal cual me pusistes en el codigo y que para disparar, dado que tengo una animacion de disparar parado y otra de disparar corriendo tendria que funcionar asi:

si esta parado y pulsa disparar sea cual sea la direccion (la del mouse) tendria que girarse el personaje y apuntar y disparar en esa direccion, en cambio si se esta corriendo y se pulsa disparar tendria que hacer esto:

solo correr y disparar si la direccion es izquierda, derecha, arriba o abajo, pero si la direccion del mouse en la que se quiere disparar es cualquiera de las cuatro diagonal (diagonal arriba izquierda, diagonal arriba derecha, diagonal abajo izquierda y diagonal abajo derecha), el personaje tendria que dejar de correr y cambiar la animacion a disparo para en la direccion correspondiente y girarse en esa misma direccion y disparar.-

espero me puedan ayudar dado que con esto ya habria finalizado el modo en el que podria utilizarse al jugador principal del juego y ya ir agregandole algunos enemigos. desde ya muchisimas gracias a todos. un abrazo.-
Título: Re: shooter isometrico
Publicado por: elviskelley en Noviembre 16, 2011, 04:32:47 AM
Bueno eso ya lo tienes casi que solucionado.
lo unico que debes hacer es verificar el speed y una variable
para verificar si esta disparando.
osea el codigo que te di tiene 2 partes
1 se encarga del movimiento en 8 direcciones, este mismo podria tener, dos faces, osea el codigo se repetiria pero un solo se cumpliria si la variable no esta activa.
Título: Re: shooter isometrico
Publicado por: the_blade en Noviembre 17, 2011, 02:33:38 AM
Hola elviskeley te comento que basandome en el codigo que me pasastes y probando y probando consegui mas o menos lo que necesitaba pero me sugieron algunos problemitas que paso a comentarte:
Para los que todavia no saben el jugador se mueve con las teclas A,S,D y W y cambia su direccion acorde a ello, incluso las diagonales y se utiliza el mouse solo para apuntar y disparar (pero al apuntar no se cambia la direccion del jugador).-
Primero cree dos variables de direccion:
Dir1=0; //almacena la direccion en donde nos encontramos o hacia donde nos estamos dirijiendo con la teclas de movimiento(en grados, por ejemplo, si pulsamos la tecla arriba, le asignara el valor 90)
Dir2=0; //esta variable asigna la direccion tambien en grados de donde se halla el mouse, y por lo tanto hacia donde se quiere disparar.-

entonce teniente estas variable definidas lo que hago es comprobar que si la direccion en que nos dirijimos por ejemplo corriendo es la misma en la que queremos disparar
if Dir0 == Dir1 {//dispara normalmente por ejemplo si corremos hacia la derecha y queremos disparar hacia esa direccion al hacer click derecho del mouse dispara normalmente mientras corre en esa direccion}
else //de lo contrario si son diferentes las direccion
{//el jugador se gira y dispara en la direccion que se esta apuntan
//por ejemplo si se esta corriendo hacia la derecha y se quiere disparar a la izquierda, este detiene su marcha, se gira hacia la izquiera en su cuerpo completo y dispara hacia la izquiera}.-
BASICAMENTE ESE SERIA EL FUNCIONAMIENTO QUE QUIERO AHORA ESTE ES EL PROBLEMA:
no se como hacer para que de alguna forma si por ejemplo como dije anteriormente queremos disparar en una direccion diferente a la que corremos reproduzca la animacion previo girarse en la direccion correcta y luego de unos segundo o de finalizada la animacion recien nos habilite para continuar con las demas acciones, ya sea seguir corriendo o disparando en otra direccion (LO QUIERO HACER ASI PORQUE SI POR EJEMPLO EL JUGAR INTENTA DISPARAR Y ENSEGUIDA QUIERE DISPARA EN OTRA DIRECCION ES TAN RAPIDA LA ANIMACION QUE DA LA IMPRESION DE QUE LA ANIMACION NO SE LLEGA A COMPLETAR, ENTONCES PRIMERO QUE TERMINE LA ANIMACION Y LUEGO SE SIGUE NORMALMENTE).-
otro de los puntos que me faltaria solucionar seria que no pueda colisionar el personaje con la mira del mouse sino que siempre lleven una distancia dado que si no para tambien que si queremos disparar muy por encima del jugardor este no sabe hacia donde tirar por ejemplo si ponemos la mira encima y tratamos de avanzar y disparar y entonces este no sabe si ir a la derecha, izquierda etc, y las animaciones quedan mal.-
SI ME PUEDEN AYUDAR CON ESTOY DOS PUNTOS YA QUEDARIA PRACTICAMENTE SOLUCIONADA LA JUGABILIDAD DEL JUGADOR Y QUEDARIA BASTANTE COMODO Y A SU VEZ YA PODRIA CONTINUAR CON OTROS ASPECTOS DEL JUEGO. ASI QUE MUCHAS GRACIAS Y ESPERO PUEDAN AYUDARME.-
Título: Re:shooter isometrico
Publicado por: petpan13 en Diciembre 04, 2013, 09:30:29 PM
elvis prove el de raton y no va solo coje las diagonales aver si le puedes echar un vistazo
a 8 direcciones isometrico controlado por mouse
Título: Re:shooter isometrico
Publicado por: 3dgeminis en Diciembre 05, 2013, 02:04:52 PM
Hace un tiempo subi un ejemplo que te puede servir solo para el cambio de sprite en las 8 direcciones, no dispara ni nada
http://www.comunidadgm.org/index.php?action=dlattach;topic=15381.0;attach=9946
Título: Re:shooter isometrico
Publicado por: petpan13 en Diciembre 05, 2013, 04:11:57 PM
El ejemplo es estupendo muchas gracias