Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: marcotemplario en Febrero 27, 2014, 03:55:46 PM

Título: Enemigo cambia de sprite.
Publicado por: marcotemplario en Febrero 27, 2014, 03:55:46 PM
He buscado pero no he encontrado nada concreto.

Estoy haciendo un juego con vista aerea (tipico zelda) de zombies. He conseguido que los zombies caminen aleatoriamente, se paren y todo lo demas, pero no consigo que cuando camine en otra direccion le cambie el sprite. Uso un Transform Sprite pero no se que poner...

Adelanto que en todo el juego no he usado ni una linea de codigo (no se ni papa) por lo que agradeceria una respuesta sin codigo, o en caso contrario bien explicada para que lo entienda. Gracias.
Título: Re:Enemigo cambia de sprite.
Publicado por: ocarina en Febrero 27, 2014, 04:10:06 PM
Amigo el primer consejo es q trates de usar gml ya q las respuestas casi siempre van a ser asi!

Segundo puedes poner unas variables en el objeto y q cuando el objeto camine para la derecho se ponga en 0 para la izquierda se ponga 1 para arriba se ponga en 2 y abajo 3 y luego en el evento step puedes poner
Si la direccion es igual a 0
Cambiar el sprite por el sprite de la derecha
Y asi sucesivamente para todas las direcciones

Ojo esto no es gml!
Título: Re:Enemigo cambia de sprite.
Publicado por: romon_28 en Febrero 27, 2014, 04:41:40 PM
La verdad si es mas complicado a gran escala usar los D&D pero si es lo que querés te explico como se hace:

No se si los zombies se te van a mover en 4 direcciones o en 8, asi que te lo explico con 4 direcciones y ni no lo cambias y ya.

En el objeto zombie añadís el evento "step", vas a la solapa "control" y agrega el icono con el < ? > y escribí lo siguiente:

direction >= 0

Luego lo mismo pero ahora escribirte esto:

direction < 45

Osea 0+45 = 45º

Y otro

direction >= 315

Osea 0-45 = 315º


Vas a la solapa "main1" y agregate el "chage sprite" (el pacman rojo) < SpC > donde los valores son:
- sprite: Sp_Zombie_Der
- subimage: -1
- speed: 1

luego hace lo mismo pero con las otras direcciones en total te quedaría algo así:
< ? > direction >= 0
< ? > direction <   45
< ? > direction >= 315
< SpC > Sp_Zombie_Der; -1; 1

< ? > direction >= 45
< ? > direction <   135
< SpC > Sp_Zombie_Arr; -1; 1

< ? > direction >= 135
< ? > direction <   225
< SpC > Sp_Zombie_Izq; -1; 1

< ? > direction >= 225
< ? > direction <   315
< SpC > Sp_Zombie_Abj; -1; 1

Me explico?
Título: Re:Enemigo cambia de sprite.
Publicado por: marcotemplario en Febrero 27, 2014, 07:11:23 PM
Gracias romon me a servido!

Ya quisiera aprender GML pero no se donde aprender. He visto muchos tutoriales pero te explican dando por sentado que tienes algun conocimiento de codigo y resulta imposible aprender.
Título: Re:Enemigo cambia de sprite.
Publicado por: ocarina en Febrero 27, 2014, 08:20:22 PM
Aprender gml no es difícil! Es mas de los lenguajes de programación q yo he usado este es el mas sencillo! (he usado java, c#, vs, .net, html, pascal, etc)

Si necesitas ayuda en esto del gml se q esta comunidad te puede ayudar mucho incluyendome yo q también te podría ayudar! Yo también estoy aprendiendo, antes solo utilizaba D&D y ahora no me gusta usarlo xq es mas rápido y se pueden hacer muchas mas cosas con gml! Ademas con el gml he visto q los resultados son mejores a la hora de ejecutar el juego!

Saludos y aquí estamos para ayudarte
Título: Re:Enemigo cambia de sprite.
Publicado por: gortz en Febrero 27, 2014, 09:02:07 PM
Te recomiendo siempre, apretar F1 y leer de vez en cuando la ayuda y dominar las estructuras condicionales como IF, FOR, WHILE que es lo que vas a usar el 90% del tiempo
Título: Re:Enemigo cambia de sprite.
Publicado por: sanosuke en Junio 18, 2014, 07:21:35 PM
hola, he seguido las instrucciones, pero no consigo que cambie el sprite hacia la derecha, lo he probado con codigo gml tambien pero nada

la variable direction la estoy usando para otras cosas y no puedo usarla para esto, pero tengo creada otra variable:
os pongo el trozo de codigo:



dirgranjero = arccos((sqrt(sqr(xmove + xprevious)))/(sqrt(sqr(xmove+ymove))+(sqr(xprevious+yprevious))))

if dirgranjero  < 45
and dirgranjero  >= 315
{
sprite_index = spr_granjeroH_walkder
}

if dirgranjero >= 45
and dirgranjero < 135
{
sprite_index = spr_granjeroH_walkup
}

if dirgranjero >= 135
and dirgranjero < 225
{
sprite_index = spr_granjeroH_walkizq
}

if dirgranjero >=225
and dirgranjero < 315
{
sprite_index = spr_granjeroH_walkdown
}


con el codigo cambian todos los sprites perfectamente salvo el de la derecha  :-X
Título: Re:Enemigo cambia de sprite.
Publicado por: penumbra en Junio 18, 2014, 07:31:51 PM
if dirgranjero  < 45 and dirgranjero  >= 315
{
sprite_index = spr_granjeroH_walkder
}

Un número no puede ser AL MISMO TIEMPO (AND) menor a 45 y mayor a 315. Por ejemplo, si direccion = 0, es menor a 45, pero no cumple la segunda condición (mayor a 315), por lo que nunca cambiará de sprite.

Si AND no funciona... la solución es evidente.
Título: Re:Enemigo cambia de sprite.
Publicado por: sanosuke en Junio 18, 2014, 07:46:17 PM
CitarSi AND no funciona... la solución es evidente.

entiendo que quieres decir que en lugar de AND deberia poner OR, esto lo acabo de probar, pero no funciona.

la verdad es que, estoy empezando con el gml y voy muy verde.

evidentemente no te voy a pedir que me corrijas el codigo y me lo pongas aqui para que yo lo pueda copiar, pero si me gustaria que me explicases un poco mas
Título: Re:Enemigo cambia de sprite.
Publicado por: penumbra en Junio 18, 2014, 07:52:21 PM
Tampoco hay mucho más que explicar, lo que se me hace raro es que no veo razón para que no puedas usar direction, lo segundo es que debes asegurarte que "dirgranjero" de verdad tenga los valores que esperas que tenga, de lo ccontrario la condición puede fallar

Si or no funciona, puedes usar

if (dirgranjero >= 0) and (dirgranjero < 46)
    sprite_index = spr_granjeroH_walkder

if (dirgranjero > 314) and (dirgranjero <= 360)
    sprite_index = spr_granjeroH_walkder
Título: Re:Enemigo cambia de sprite.
Publicado por: sanosuke en Junio 18, 2014, 08:04:46 PM
Gracias penumbra, me he parado a darle vueltas al asunto del direction, efectivamente con direction funciona, y ahora el or tambien.  :D

a veces estar 3 horas delante del ordenador estrujandote el melon atonta bastante. :-[
Título: Re:Enemigo cambia de sprite.
Publicado por: empardopo en Junio 19, 2014, 08:45:03 AM
Te puedo asegurar que muchas veces es mejor cambiar de aires en la programación y asomarte a la ventana o tomarte tranquilamente una taza de café con la idea de desconectar un rato.

Por cierto, ¿existe algún tutorial bueno de GML (me da igual en inglés)? Si no existe estaría bien hacer uno con ejemplos, etc incluyéndolo en esa traducción/manual que están los compis haciendo por ahí.

Saludos