Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Diciembre 25, 2014, 01:07:08 AM

Título: Evitar que recuerde las teclas pulsadas
Publicado por: kostra en Diciembre 25, 2014, 01:07:08 AM
Wenas, tengo un problema... como ya sabrán normalmente GM cuanto pulsas una tecla mientras carga, se la recuerda y cuando ya puede, entonces procede a la pulsación que hiciste mientras cargaba. El caso es que a mí me pasa, pero no al cargar, sino que cuando le digo que no puedo pulsar, si pulso, al activarse el poder pulsar va y se pulsa solo recordando lo que pulsaste cuando no podías... me explico con este trozo de código:
if ocout.image_index >= 3
    {
        if place_snapped(8,8)
        {
            if keyboard_check_direct(vk_up)
            {
                if direction != 90 sound_play(snturn);
                direction = 90;
            }


porsupuesto, que puse una dirección y están las 4, bueno, el caso es... cuando empieza una partida, hay un contador, con su image_index en 0 y va pasando, 1,2,3... entonces, todo bien, cuando está el contador (el típico 3,2,1,go!), en este código se supone que solo puedo pulsar cuando termina el contador, (cuando está en "go!" y así me puedo mover)... todo bien, si no ha terminado, no puedo moverme y cuando termina si, ok...

PERO! pasa que si pulso algo mientras no puedo... aunke luego no pulse nada, al terminar el contrador, va y se me pulsa lo recordado que pulsé antes!!! POR QUÉ?!?!?! representa que ese código no se ejecuta si no llegó a "go!"!!

He pensado... el keyboard_check_direct... por casualidad detecta el lastkey?? de ser así, hay alguna solución que no sea poner keyboard_check asecas?, el movimiento no funciona igual de bien con ese comando... y necesito una solución para esto porque por culpa de eso, muere el player nada más empezar :S
Título: Re:Evitar que recuerde las teclas pulsadas
Publicado por: eams1986 en Diciembre 25, 2014, 01:14:55 AM
Hola kostra lo que debes de hacer es hacer una varible que no active eso antes de tiempo.


Saludos
Título: Re:Evitar que recuerde las teclas pulsadas
Publicado por: eams1986 en Diciembre 25, 2014, 01:19:02 AM
Te dejo asi un rapidito ejemplo..

///
if jugar==false
{
/////
}


////////////////////////////////////
jugar=true;

{
///////
}

;) ;D
Título: Re:Evitar que recuerde las teclas pulsadas
Publicado por: king195 en Diciembre 25, 2014, 01:52:55 PM
Que bien vendria un

fflush(stdin) no?   XD
Título: Re:Evitar que recuerde las teclas pulsadas
Publicado por: Black_Cat en Diciembre 25, 2014, 09:23:29 PM
Cita de: king195 en Diciembre 25, 2014, 01:52:55 PM
Que bien vendria un

fflush(stdin) no?   XD

Lo hay, y es una funcion de GM:

[GML]
io_clear();
[/GML]

Atendiendo al problema: podrías colocarlo en el instance mismo que deja de hacerse la cuenta regresiva, entonces se borrarán las pulsaciones en el "buffer" dejandolo limpio para la próxima tecla que fuera presionada.

Título: Re:Evitar que recuerde las teclas pulsadas
Publicado por: kostra en Diciembre 26, 2014, 06:27:01 PM
eams, eso ya lo tengo hecho, lo que mientras "jugar == 0" pulso algo, correctamente no funciona, pero como uso el check direct, al ponerse "jugar" a 1, se recuerda la última tecla pulsada y la acciona automáticamente.

king, no sé de qué hablas, pero por lo que leo de black cat que dice algo de "clear" me puedo imaginar... y creo ke es justo lo que necesito...


por casualidad eso hace que se borre el lastkey?? (y más cosas supongo), de ser así, cómo se usa?? (de todos modos voy a ir probandolo yo, gracias)


EDITO: acabo de probarlo en un editable nuevo, he creado un objeto conde puse io_clear(); en el global_left_pressed y he probado el juego en pruebas, he mirado las globales y correctamente.. pulso teclas y se registra el lastkey y cuando click al raton, se reinicia todo :D muchas gracias, lo aplico ahora mismo en mi juego y si funciona, pongo ya la etiqueta de [Solucionado] en el tema, muchas gracias, no conocía esa función, me servirá muchísimo en el futuro :D

EDITO 2: No me funciona!!! :'(  incluso veo en el debugger como se pone el lastkey en 0 pero aun estando en 0, va y se me mueve el player sin tocas nada cuando el contador llega a cero (siempre que haya pulsado mientras está contando)... así que no, parece que no pilla la tecla desde el lastkey, de qué otra parte puede ser? hay algún otro bufer o como se diga que recuerde las malditas teclas? :S:S ojalá alguien sepa ayudarme, es una jodienda perder la partida por culpa de esto, es un problema grabe :S y es lo que me falta paar publicarlo lo más estable posible :S
Título: Re:Evitar que recuerde las teclas pulsadas
Publicado por: Fenix oscuro en Diciembre 29, 2014, 10:12:32 AM
porque no pones el check direct al principio y te ahorras el io_clear?

por ejemplo, si yo tengo esto
if control = 1
{
if keyboard_check_direct(vk_up)
{
hspeed = 4
}
}


La tecla se quedara grabada y realizara la funcion hasta que control sea 1, pero si lo haces de esta forma:

if keyboard_check_direct(vk_up)
{
if control = 1
{
hspeed = 4
}
}


aunque presiones "arriba" no se ejecutara hasta que control sea 1.

Dale prioridad al checar teclas y despues a las variables.
Título: Re:Evitar que recuerde las teclas pulsadas
Publicado por: kostra en Diciembre 30, 2014, 11:14:11 AM
hmmm... puede ser buena opción O_O voy a tratar, así se "ejecutará el comando aunke le devuelva false el "control" pero almenos lo hace para que no quede la tecla en el aire, dios pero qué tontería y que bueno xd jaja, lo pruebo en cuanto pueda y edito!