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
if(key(_space))
while(key(_space))
frame;
end
disparar();
end
Con eso, no disparará hasta que sueltes la barra espaciadora.
Perfecto, justo lo que queria, muchisimas gracias.!
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.
[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...
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...
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...
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)
Esta bien, pero ese no es el caso, si no como hacer publicas las variables para acceder desde otro proceso a esas variables.
otro minituto que me curraré :D
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...
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.
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.
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 **)
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.
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 :)
son del mismo tipo... el error esta en pensar que puntero es un tipo... puntero no es un tipo.