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
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

Hola kostra lo que debes de hacer es hacer una varible que no active eso antes de tiempo.


Saludos

Te dejo asi un rapidito ejemplo..

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


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

{
///////
}

;) ;D

Que bien vendria un

fflush(stdin) no?   XD

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.




#5 Diciembre 26, 2014, 06:27:01 PM Ultima modificación: Diciembre 26, 2014, 06:43:01 PM por kostra
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
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]

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.

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!
[spoiler="ola k ase clickarme o k ase"]la imagen no se quita xD
[/spoiler]