Noticias

¡Ayuda a la Comunidad GM, haz una donación!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: fijar un sprite presionando un botón  (Leído 2418 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado santkont

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 74
  • Sexo: Masculino
    • Ver Perfil
en: Noviembre 08, 2009, 07:30:41 pm
Me presento, soy santkont y soy argentino. Estoy registrado en esta comunidad desde julio del 2008 y nunca tuve la necesidad de preguntar algo (ya que en esta comunidad no hay pregunta que no se haya hecho).Pero en esta ocación no encontré (o no supe las palabras claves para buscar) esta pregunta ni su respuesta.

Tengo un personaje que se mueve en las 8 direcciones (vista cenital) y tengo para cada dirección su sprite correspondiente. Hasta ahí funciona perfectamente.

Lo que yo quiero hacer es que cuando presiono (vk_space) el sprite_index actual quede fijo mientas yo mantenga presionado dicho botón.

En otras palabras, quiero que cuando yo mantenga presionado el espacio el personaje se mantenga mirando para el mismo lado, no importa que yo me mueva (como si fuera un cangrejo, aunque en las 8 direcciones)

Probé con este tipo de código:
Código: [Seleccionar]
if keyboard_check(vk_space)
{sprite_index=0}
Pero el sprite_index lo toma como el sprite que mira hacia arriba y no el actual (hace lo que yo quiero hacer, pero sólo con el sprite que mira hacia arriba).

Sé que el problema está en como me expreso en la parte de sprite_index pero no sé como hacerlo bien.

Como hay muchas formas de programar les pongo como es la forma que yo utilicé para el movimiento:
Código: [Seleccionar]
//en movimiento
if keyboard_check(vk_left)     {if place_free(x-2,y) x-=2};
if keyboard_check(vk_right)   {if place_free(x+2,y) x+=2};
if keyboard_check(vk_up)      {if place_free(x,y-2) y-=2};
if keyboard_check(vk_down) {if place_free(x,y+2) y+=2};
//detenido
if keyboard_check_released(vk_left)    {x-=0};
if keyboard_check_released(vk_right)  {x+=0};
if keyboard_check_released(vk_up)     {y-=0};
if keyboard_check_released(vk_down) {y+=0};

Muchas gracias.
(por todo lo que me ayudaron antes)

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado Alfonsos1

Respuesta #1 en: Noviembre 08, 2009, 08:00:15 pm
cambia los sprites de la siguiente manera:

pon en evento step:

if(!keyboard_check(vk_space))//el ! significa que NO
{
if(eyboard_check(vk_left) ) sprite_index = sprite_que_mira_a_la_izquierda
if(keyboard_check(vk_right)) sprite_index = sprite_que_mira_a_la_Derecha
if(keyboard_check(vk_up) ) sprite_index = sprite_que_mira_a_la_arriba
if(keyboard_check(vk_down)) sprite_index = sprite_que_mira_a_la_abajo
}

//cambiara el sprite solo si no esta apretado space
« última modificación: Noviembre 08, 2009, 08:06:06 pm por Alfonsos1 »

 


Desconectado santkont

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 74
  • Sexo: Masculino
    • Ver Perfil
Respuesta #2 en: Noviembre 08, 2009, 08:40:03 pm
Código: [Seleccionar]
if(!keyboard_check(vk_space))//el ! significa que NO
{
if(keyboard_check(vk_left) ) sprite_index = sprite_que_mira_a_la_izquierda
if(keyboard_check(vk_right)) sprite_index = sprite_que_mira_a_la_Derecha
if(keyboard_check(vk_up) ) sprite_index = sprite_que_mira_a_la_arriba
if(keyboard_check(vk_down)) sprite_index = sprite_que_mira_a_la_abajo
}

Muchas gracias por responder pero con ese código estás diciendo que si NO se presiona el vk_space cumple esas funciones.

Pero cuando el vk_space SI está presionado no hace nada (y teniendo en cuenta que uso los mismos botones para moverme, tampoco se mueve), el personaje se queda congelado mientras tengo presionado el vk_space

 


Desconectado Alfonsos1

Respuesta #3 en: Noviembre 08, 2009, 08:45:46 pm
deveras?  ??? ??? ??? ??? ???

probaste asi, ¿verdad?

Código: [Seleccionar]
if(!keyboard_check(vk_space))//el ! significa que NO
{
if(keyboard_check(vk_left) ) sprite_index = sprite_que_mira_a_la_izquierda
if(keyboard_check(vk_right)) sprite_index = sprite_que_mira_a_la_Derecha
if(keyboard_check(vk_up) ) sprite_index = sprite_que_mira_a_la_arriba
if(keyboard_check(vk_down)) sprite_index = sprite_que_mira_a_la_abajo
}

//en movimiento
if keyboard_check(vk_left)     {if place_free(x-2,y) x-=2};
if keyboard_check(vk_right)   {if place_free(x+2,y) x+=2};
if keyboard_check(vk_up)      {if place_free(x,y-2) y-=2};
if keyboard_check(vk_down) {if place_free(x,y+2) y+=2};
//detenido
if keyboard_check_released(vk_left)    {x-=0};
if keyboard_check_released(vk_right)  {x+=0};
if keyboard_check_released(vk_up)     {y-=0};
if keyboard_check_released(vk_down) {y+=0};

en el evento step

 


Desconectado santkont

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 74
  • Sexo: Masculino
    • Ver Perfil
Respuesta #4 en: Noviembre 08, 2009, 09:05:06 pm
Que raro...Ahora si.
Habre sido yo...

Pero el personaje no se mueve en diagonales como lo hace cuando no está presionado el vk_space...

Igual te estoy agradecido, pero si sabes porque pasa eso te agradecería muchisimo más  :-[

 


Desconectado Alfonsos1

Respuesta #5 en: Noviembre 08, 2009, 09:19:06 pm
eso me resulta bastante raro, los teclados no soportan mas de cierto limite de teclas pero por lo generas si soportan 3, sobretodo si son teclas de distintos tipos.

no se, pero lo de la tecla espacio lo unico que afecta es el sprite, no deveria cambiar para nada el movimiento  ???

prueba transferir el evento de la tecla espacio al clic izquierdo o derecho, si de esa manera si funciona supongo que el problema es de el teclado...

 


Desconectado santkont

  • Habitual
  • *
  • Puntos: 0
  • Mensajes: 74
  • Sexo: Masculino
    • Ver Perfil
Respuesta #6 en: Noviembre 08, 2009, 09:35:47 pm
Si...Es el teclado... :'(

Bueno, muchas gracias. ;D
¿Cómo hago para dar el tema como solucionado?
¿Simplemente pongo en el titulo (Solucionado)?