Pulsar tecla, NO presionar..

Started by Milton884, March 14, 2011, 10:32:22 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Milton884

Que tal? como sabran la funcion key(_tecla), comprobamos si dicha tecla se presiono. En mi caso un matamarcianos, pulsar la tecla Espaciadora, se dispara una bala, pero si presionas la tecla, salen miles de balas si seguis presionando. Entonces mi pregunta es , como puedo hacer para que se dispare uno a la vez y no salgan miles

Yawin

if(key(_space))
   while(key(_space))
       frame;
   end
   disparar();
end


Con eso, no disparará hasta que sueltes la barra espaciadora.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

Milton884

Perfecto, justo lo que queria, muchisimas gracias.!

Abram

Esa no es la idea, asi no dispara hasta que no suelte la barra espaciadora, y deberia ser que disparara y hasta que no volviera a pulsar no volviera a disparar.

gecko

[code language="bennu"]
private
   bloqueo


if ( key(_space) and not bloqueo )
   bloqueo = true;
   disparar();
elseif ( not key(_space) and bloqueo)
   bloqueo = false;
end

[/code]

deberia funcionar...
Torres Baldi Studio
http://torresbaldi.com

Drumpi

El método de gecko es uno, se conoce como "el método del estado anterior".
El otro es:

if (key(_space)) tecla_space++; else tecla_space=0; end
if (tecla_space==1) disparar(); end

Además te permite saber cuanto tiempo lleva pulsada, por si quieres hacer la carga de un disparo, hacer que dispare automáticamente cada X frames, o hacer disparos retardados.

PD: usar el método de yawin no se aconseja, hay casos en los que sí sirve, pero por lo general te deja paralizado al proceso mientras mantienes la tecla pulsada: no puede buscar colisiones, no se puede mover por sí misma...
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Milton884

Joya, tmb tengo otra duda no quiero hcer al dope otro post...
Como puedo acceder a una variable de un proceso, desde otro proceso?
supuestamente es haciendola publica...
probe declarandola asi:

PROCESS protagonista();
PUBLIC
   bool disparando=false;

.........

Pero cuando trato de ejecutar, me dice que disparando No existe.. (cuando lo uso en el code).
tmb trate asi... segun un manual de Bennu:

DECLARE PROCESS protagonista();
PUBLIC
   bool disparando=false;
END

Pero tampoco...

Rein (K´)ah Al-Ghul

http://wiki.bennugd.org/index.php?title=Datatypes

no existe boolean...

porque no usar un dato numerico (byte ?) y preguntar si es verdadero ( por ejemplo, verdadero = 1)

Rein (K´)ah Al-Ghul
Infected with the Krieger strain of the Human-MetaHuman Vampiric Virus.

en vez de darme Karma positivo, denme (K´)arma negativ

Milton884

Esta bien, pero ese no es el caso, si no como hacer publicas las variables para acceder desde otro proceso a esas variables.

Futu-block


Outlaw

Quote from: Rein (K´)ah Al-Ghul on March 15, 2011, 02:19:56 AM
http://wiki.bennugd.org/index.php?title=Datatypes

no existe boolean...

porque no usar un dato numerico (byte ?) y preguntar si es verdadero ( por ejemplo, verdadero = 1)


Perdon Rein, pero debo decirte que yo uso boolean todo el tiempo, si queres te muestro codigo de mi juego, vivo poniendo true y false en muchas condiciones, de hecho agregue boolean como tipo de dato en el editor para que aparesca en azul y nunca me dio error, prueben sino...
"Life is cheap when the bounty is high"

SplinterGU

boolean no existe como dato... se interpreta como int, de la misma forma que se interpreta si usas como tipo de dato "mi_perro_es_un_gato"... por ahora poner cualquiera de estas cosas funciona porque se interpretan como datos tipo proceso (publicas), pero puede que en algun momento esto se haga de mejor forma y ya deje de funcionar estas cosas.

cosa que puede ocurrir pronto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Splinter, si vas a revisar lo de las variables, echa un vistazo a la declaración de punteros porque:

mi_tipo pointer var1, var2;

Hace que var1 sea puntero a mi_tipo, pero var2 sea int. Sin embargo:

mi_tipo pointer var1;
mi_tipo pointer var2;

Lo hace bien. Estoy buscando el código donde me da el fallo pero no lo encuentro, sorry.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

#13
drumpi... si te entiendo bien lo que decis.

el tipo es mi_tipo, pointer esta relacionado con la variable... es correcto que se comporte como se esta comportando...

prueba en C, veras que es tal cual en bennugd...

int *a, b, *c, **d;

significa:

tipo de dato base: int

a = puntero al tipo de dato base (int *)
b = tipo de dato base (int)
c = puntero al tipo de dato base (int *)
d = puntero a puntero al tipo de dato base (int **)
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

drumpi, el funcionamiento es correcto... me hiciste dudar y probar...


import "mod_say";

type lala
    int a;
    float b;
end

private
lala *a, b;

begin

a = &b;

a.a += 0.1;
a.b += 0.1;

say(a);
say(&b);
say(b.a);
say(b.b);
say(sizeof(b));

end


es funcionamiento es perfecto.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2