Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: scuws on April 02, 2010, 01:33:09 PM

Title: ¿Como hacer que solo se pueda pulsar una vez?
Post by: scuws on April 02, 2010, 01:33:09 PM
Tengo el problema que cuando pongo:
IF (key(_up))
...
END


El problema es que mientras mantengo pulsado arriba ejecuta codigo(...), yo quiero que sea solo cuando lo pulsas una vez y que tengas que soltar y volver a pulsar para que se vuelva a cumplir la condicion

no se si me he explicado bien

Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: BoMbErLiNk on April 02, 2010, 02:34:24 PM
Puedes probar con estados :

[code language="bennu"]
IF (key(_up))

IF (arriba_pulsado==0)
... codigo ...
arriba_pulsado=1;
END

ELSE

arriba_pulsado=0;

END[/code]
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Rein (K´)ah Al-Ghul on April 02, 2010, 04:39:15 PM
tmb se puede usar el scan_code


IF (key(_up))

while( scan_code == _up )
frame;
end

END


Lo unico que esto te congela el proceso mientras se mantiene precionado la tecla, lo cual te obliga a soltar la tecla para volver a usarla...
es similar a los de que dijo bomberlink,
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: SplinterGU on April 02, 2010, 05:21:27 PM
por lo general cuando necesitas hacer eso, el proceso en cuestion no hace nada hasta que sueltes dicha tecla... y en esos casos la solucion es simple (no es necesario usar scan_code, ya que eso no te va a evitar que solo tome 1 pulsacion de dicha tecla)


if ( key(_up))
    while( key(_up))
        frame;
    end
end
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: BoMbErLiNk on April 02, 2010, 08:24:50 PM
Pero esa teoría de pulsar y congelar el proceso no la veo correcta, si un ninja lanza una estrella mientras salta lo vas a dejar ahí congelado en el aire hasta que sueltes la tecla  :D
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: SplinterGU on April 02, 2010, 09:08:11 PM
man... para los personajes animados nunca esperamos a soltar la tecla... esto es otro caso... como ser, seleccion de la opcion de un menu, pulsacion de una tecla cuando escribimos un texto, ese tipo de cosas... en los movimientos de un personaje, nunca esperamos a soltar la tecla para el siguiente movimiento...
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: BoMbErLiNk on April 02, 2010, 09:23:38 PM
Por eso digo, el autor no ha especificado para que quiere usarlo y mejor que queden los conceptos claros, porque el que yo digo vale para ambos casos :)
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Futu-block on April 02, 2010, 09:28:18 PM
yo se lo que quiere, lo que quiere es que por ejemplo le dé a saltar y no siga el muñeco saltando por mas que siga pulsando el boton...

eso se hace con un testigo de pulsacion
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Rein (K´)ah Al-Ghul on April 02, 2010, 09:39:40 PM
Quote from: BoMbErLiNk on April 02, 2010, 08:24:50 PM
Pero esa teoría de pulsar y congelar el proceso no la veo correcta, si un ninja lanza una estrella mientras salta lo vas a dejar ahí congelado en el aire hasta que sueltes la tecla  :D
seria gracioso ver algo asi xD
tambien lo pense para los casos que dijo splinter...
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: SplinterGU on April 03, 2010, 12:37:49 AM
Quote from: Futublog on April 02, 2010, 09:28:18 PM
yo se lo que quiere, lo que quiere es que por ejemplo le dé a saltar y no siga el muñeco saltando por mas que siga pulsando el boton...

eso se hace con un testigo de pulsacion

dudo que sea eso, porque el salto no debe depender solo de que se pulse la tecla... tiene que depender de cosas como "!estoy_saltando" o "estoy_saltando == 0" y/o "tengo_un_piso_debajo"... si yo estoy en el aire no puedo saltar... a menos que tenga algun poder especial que me permita tomar impulso en el aire como el juego "prototype".

no digo que lo que digan sea incorrecto, pero si alguien hace este tipo de preguntas es porque todavia tiene un nivel inicial en bennu, y por ende hay que explicarle primero la opcion mas simple... y no complicarlo con cosas raras... y lo mas simple y logico es "si pulso la tecla... espero hasta que dicha tecla deje de estar pulsada" lo que se traduce en lo que yo puse... ademas es el uso mas comun y simple...
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: scuws on April 03, 2010, 08:31:36 AM
Esto lo pensaba aplicar a dos cosas como bien a dicho Futublog para que no se quede saltando todo el rato y para hacer un menu como decia SplinterGU  y cambiar de opcion cada vez que soltabas y le dabas,

¿Seria correcto utilizarlo en una animacion?


Edito: con los estados me funciona bien

Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Futu-block on April 03, 2010, 09:20:05 AM
hombre, para el menú le das a la tecla para cambiar de opción y se mueve a una velocidad de vertigo, con lo que te hace plantearte si hay una solucion...

lo suyo es una ''conmutada'' como digo yo:
[code language="bennu"]
if (key(_up) and !varup)
      hacer tal cosa;
      varup = true;
end



if (!key(_up) and varup)
      varup = false;
end

[/code]

varup es una variable (que tendras que declarar) que actua de testigo de pulsacion de la tecla, en este caso arriba; la primera parte del codigo verifica si el testigo no está activado y lo activa, inmediatamente se ejecuta lo deseado.
la segunda parte del codigo es la que vigila cuando se suelta la tecla deja de hacer lo deseado.
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: scuws on April 03, 2010, 11:26:29 AM
Yo lo que he hecho para el menu es lo siguiente

IF (key(_down))
contador--;
WHILE ( key(_down))
FRAME;
         END
END
IF (key(_up))
contador++;
WHILE ( key(_up))
FRAME;
END
END
IF ( contador < 1 )
contador = 2;
END
IF ( contador > 2 )
contador = 1;
END
IF ( contador == 1 )
x = x_1;
y = y_1;
END
IF ( contador == 2 )
x = x_2;
y = y_2;
END
IF ( key(_enter))
IF ( contador == 1)
delete_text ( all_text );
inicializador ( );
BREAK;
         END
        IF ( contador == 2 )
BREAK;
END
END
FRAME;


Aqui tengo un grafico de una flecha que va cambiando a posiciones predefinidas (x_1 , y_1 ...) y al pulsar intro coge el valor de contador
y inicializa o cierra el juego, solo hay dos opciones empezar y salir
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: BoMbErLiNk on April 03, 2010, 01:04:32 PM
scuws, usar estados y guardar el estado de las teclas es completamente correcto, a la fuerza vas a tener que montarte un sistema similar en cuanto trabajes con objetos animados  ;)

Quote from: Futublog on April 03, 2010, 09:20:05 AM
[code language="bennu"]
if (key(_up) and !varup)
      hacer tal cosa;
      varup = true;
end



if (!key(_up) and varup)
      varup = false;
end

[/code]


Pero eso es lo que yo he puesto hombre  ???, la única diferencia es que aquí estas usando 4 condiciones obligatorias por frame.
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Drumpi on April 03, 2010, 05:16:35 PM
¿Y qué me decís del siguiente método?

if (key(_up)) tecla_up++; else tecla_up=0; end

de esta forma, basta con hacer que

If (tecla_up==1) .......

siendo tecla_up una variable global.
Así si la acabas de pulsar, vale 1, si lleva más tiempo valdrá el número de frames que han pasado desde que empezaste, y 0 si no está pulsada.

Bajo mi punto de vista es más sencillo y útil que el código básico de comprobar el estado anterior.
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Futu-block on April 03, 2010, 09:56:56 PM
el codigo que puse me lo enseñó drumpi en una pregunta que hice y me parece la mas apropiada y que me gusta, no quise hacer mas publicidad de el porque como vive muy cerca mia la gente va a pensar mal... ¬¬
je je je
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Mr Matsusaka on April 07, 2010, 06:01:18 AM
Quote from: Drumpi on April 03, 2010, 05:16:35 PM
¿Y qué me decís del siguiente método?

if (key(_up)) tecla_up++; else tecla_up=0; end

de esta forma, basta con hacer que

If (tecla_up==1) .......

siendo tecla_up una variable global.
Así si la acabas de pulsar, vale 1, si lleva más tiempo valdrá el número de frames que han pasado desde que empezaste, y 0 si no está pulsada.

Bajo mi punto de vista es más sencillo y útil que el código básico de comprobar el estado anterior.

Ademas creo que en Bennu puedes poner sencillamente
If (tecla_up)
quedando el codigo un poco mas limpio.
Title: Re: ¿Como hacer que solo se pueda pulsar una vez?
Post by: Drumpi on April 10, 2010, 05:41:38 PM
Quote from: Mr Matsusaka on April 07, 2010, 06:01:18 AM
Quote from: Drumpi on April 03, 2010, 05:16:35 PM
¿Y qué me decís del siguiente método?

if (key(_up)) tecla_up++; else tecla_up=0; end

de esta forma, basta con hacer que

If (tecla_up==1) .......

siendo tecla_up una variable global.
Así si la acabas de pulsar, vale 1, si lleva más tiempo valdrá el número de frames que han pasado desde que empezaste, y 0 si no está pulsada.

Bajo mi punto de vista es más sencillo y útil que el código básico de comprobar el estado anterior.

Ademas creo que en Bennu puedes poner sencillamente
If (tecla_up)
quedando el codigo un poco mas limpio.

Mmmm, sí y no. Si lo que quieres comprobar es si la tecla está pulsada, sí que puedes hacer "if(tecla_up)" (aunque para eso mejor usar directamente KEY), pero si lo que quieres ver es que se acaba de pulsar, tienes que añadir el "==1", porque bennu detecta como true cualquier valor distinto de cero (en DIV y Fenix eran los números impares, por lo que tampoco valdría).