Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Milton884 on March 14, 2011, 10:32:22 PM

Title: Pulsar tecla, NO presionar..
Post by: Milton884 on March 14, 2011, 10:32:22 PM
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
Title: Re: Pulsar tecla, NO presionar..
Post by: Yawin on March 14, 2011, 10:51:47 PM
if(key(_space))
   while(key(_space))
       frame;
   end
   disparar();
end


Con eso, no disparará hasta que sueltes la barra espaciadora.
Title: Re: Pulsar tecla, NO presionar..
Post by: Milton884 on March 14, 2011, 11:11:56 PM
Perfecto, justo lo que queria, muchisimas gracias.!
Title: Re: Pulsar tecla, NO presionar..
Post by: Abram on March 15, 2011, 12:14:04 AM
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.
Title: Re: Pulsar tecla, NO presionar..
Post by: gecko on March 15, 2011, 12:47:16 AM
[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...
Title: Re: Pulsar tecla, NO presionar..
Post by: Drumpi on March 15, 2011, 12:56:42 AM
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...
Title: Re: Pulsar tecla, NO presionar..
Post by: Milton884 on March 15, 2011, 02:04:06 AM
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...
Title: Re: Pulsar tecla, NO presionar..
Post by: Rein (K´)ah Al-Ghul on March 15, 2011, 02:19:56 AM
http://wiki.bennugd.org/index.php?title=Datatypes (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)
Title: Re: Pulsar tecla, NO presionar..
Post by: Milton884 on March 15, 2011, 02:30:17 AM
Esta bien, pero ese no es el caso, si no como hacer publicas las variables para acceder desde otro proceso a esas variables.
Title: Re: Pulsar tecla, NO presionar..
Post by: Futu-block on March 15, 2011, 03:15:20 PM
otro minituto que me curraré :D
Title: Re: Pulsar tecla, NO presionar..
Post by: Outlaw on March 18, 2011, 05:28:58 AM
Quote from: Rein (K´)ah Al-Ghul on March 15, 2011, 02:19:56 AM
http://wiki.bennugd.org/index.php?title=Datatypes (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...
Title: Re: Pulsar tecla, NO presionar..
Post by: SplinterGU on March 18, 2011, 03:00:19 PM
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.
Title: Re: Pulsar tecla, NO presionar..
Post by: Drumpi on March 19, 2011, 01:09:04 AM
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.
Title: Re: Pulsar tecla, NO presionar..
Post by: SplinterGU on March 19, 2011, 02:58:11 PM
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 **)
Title: Re: Pulsar tecla, NO presionar..
Post by: SplinterGU on March 19, 2011, 03:21:01 PM
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.
Title: Re: Pulsar tecla, NO presionar..
Post by: Drumpi on March 19, 2011, 07:11:20 PM
Ah, vale. Tenía entendido que todas las variables declaradas en la misma línea (o sea, separadas por comas) eran del mismo tipo, incluyendo punteros a..., que cambiaban al cambiar de linea (usar punto y coma).

Entonces lo estoy haciendo bien :)
Title: Re: Pulsar tecla, NO presionar..
Post by: SplinterGU on March 19, 2011, 10:08:24 PM
son del mismo tipo... el error esta en pensar que puntero es un tipo... puntero no es un tipo.