Hola hokuto!
Pues mira te explico, esas funciones las uso internamente en la libreria, osea, estan escritas en el archivo gamelibzero.pde.
Simplemente puedes añadir el codigo que necesites en ellas, claro.. la función key() es mas avanzada que el API que te ofrece processing, es por eso que no te aclaras, por que la función key() de la game lib zero te abstrae de muchas cosas a bajo nivel como estas de las teclas.
Vale, te pego el codigo de lo que te interesa..
boolean[] keys = new boolean[256];
Keyboard keyboard = new Keyboard();
//.............................................................................................................................................................
void keyPressed() {
if (keyCode != 17 && keyCode != 18) {
if ( keyboard.active ) {
keyboard.core();
}
}
//println(keyCode);
keys[keyCode] = true;
if (keyCode == 27) {
key = 0;
stop();
}
}
//.............................................................................................................................................................
void keyReleased() {
keys[keyCode] = false;
}
Vale.. mejor te pego el codigo que realmente te interesa de estas dos funciones..
boolean[] keys = new boolean[256];
//.................................
void keyPressed() {
keys[keyCode] = true;
}
//.................................
void keyReleased() {
keys[keyCode] = false;
}
Creo que habla por si mismo jeje, el tema es que tengo un array de boolean que contiene el estado de todas las teclas, entonces se pone la tecla en cuestion a true/false cuando se pulsa/suelta..
desde ahí puedes captar lo que necesitas, yo lo que haría para que no sea tocar demasiado la libreria es lo siguiente:
boolean[] keys = new boolean[256];
//.................................
void keyPressed() {
keys[keyCode] = true;
teclaPulsada(keyCode);
}
//.................................
void keyReleased() {
keys[keyCode] = false;
teclaSoltada(keyCode);
}
Donde teclaPulsada() y teclaSoltada() te las implementas tu y son llamadas externamente cuando se pulsa o suelta una tecla, así tienes lo que quieres, también hay una manera mas sencilla y facil de usar esto.. quizñá te gustará mas..
y se trata de comprobar cuando una tecla ha cambiado de estado, osea.. sabiendo como estaba antes, puedes mirarla ahora y ver si ha habido cambio.. te pongo un ejemplo de proceso que te dice cuando has pulsado enter..
class pulsarEnter extends sprite{
boolean estadoAnterior = false;
void frame(){
// detectar pulsar
if(key(_ENTER) && !estadoAnterior){
println("Acabas de pulsar ENTER!");
}
// detectar soltar..
if(!key(_ENTER) && estadoAnterior){
println("Acabas de soltar ENTER..");
}
// el ultimo paso es guardar el estado actual para usarlo como anterior
// en el frame siguiente.. truco piruco XD..
estadoAnterior = key(_ENTER);
}
}
Creo que este ultimo ejemplo es el mas adecuado ya que es una locura detectar todas las teclas pulsadas y soltadas.. locura no, simplemente no tiene mucho sentido en un juego creo yo, solo te van a interesar conocer los estados de unas pocas..
Entonces..
Para algo generico tienes las funciones base de processing desde las que puedes saber que tecla se ha pulsado facilmente usando la variable keyCode.. y luego puedes hacerte un controlador de teclas como este que te acabo de enseñar que es super simple y eficiente, por que son dos simples operaciones a nivel bool.. esto no consume nada de recursos y quizá pensandolo bien ahora explicandotelo, para un juego, sea la mejor opción por que es implementable en el punto del programa que necesites y no depende de nada.
Sobre el estado del framework, va genial tio, estoy realmetne metiendome en el 3d.. quiero publicar este verano algunos proyectos en la playStore ya por fin
Así que este veranito, osea.. par ami apartir del dia 4 del mes que viene empieza lo fuerte.
Actualizaré publicamente todo.. También es el momento de empezar el master de gameLibZero con 3 personas, una de ellas conocida por los foros de gemix y de la cual espero que surjan futuros negocios! "no te digo mas xd.." y las otras dos son clientes que quieren ponerse al dia con una semanita de masterClass de processing y gameLibZero.
Tengo el verano completo, y lo cojo con mucha ilusión pues llevo muchos años deseando meterme con el 3d y aunque se que el motor que uso es limitado, para mi el haberlo montado yo es super satisfactorio tio.
El siguiente paso cuando tenga varios proyectos ya en marcha y vea como es realmente esto es saltar a Three.js y montar mi querido 3Div.js que llevo mucho tiempo diseñando y que practicamente podría empezar ya, pero por tiempo libre no puedo todavia.
Si xd.. otro framework mas.. jajaja.... 3Div.js va a ser lo que no podrá ser con processing por su falta de performance y features, un div en toda regla, enfocado en hacer juegos puramente 3d con el toque 2d de div para todo lo que interfaces de usuario y puesta en pantalla de textos y graficos se necesite, pero basicamente será un motor con el que poder hacer un juego en 5 minutos como dios manda ya por fin.
Durante estos años me he dado cuenta de que pensar en el 2D es un completo error, no hablo de estilos ni tipos de juegos, si no mas bien de engines y motores a usar a bajo nivel, realmente todo esta bajo una capa 3d nativa que es vulkan y opengl.. hay otros pero estos son los que se estan asentando mas.. "parece ser por ahora".. osea... el tema es que todo lo que puedes sacar por pantalla paso por ellos, y estos son puramente 3d con arreglos para pintar en 2d.. pero en el fondo de sus tripas piensan y tratan las cosas en 3d con o sin profundidad.
Y es por esto que me he dado cuenta de que es mas sencillo hacer un motor 3d y arreglarle la parte 2d que hacerlo al reves como yo lo estoy haciendo ahora xd..
Por que es hacer las cosas para desacerlas y luego volverlas a hacer, y eso se traduce en falta de performance, que ahun así hablamos de vulkan y opengl.. corren mucho y puedes hacer juegos sin problemas con lo que tengo ahora, pero me doy cuenta en benchmarks de que hay una sobrecarga en el sistema que uso, y que tnego que arreglar.. así que paso por ahora en esta primera versión, pero para la siguiente ya salto a un engine puro 3D con su sistema de 2d apañao jejeje..
Y no te caliento mas la cabeza tio.. vamos al lio!!