key_event.lib
#ifndef __KEY_EVENT_LIB
#define __KEY_EVENT_LIB
import "mod_key";
import "mod_proc";
global
_key_use = 0;
_key_state[127][1];
end
#define _key_pressed 0
#define _key_down 1
#define _key_up 2
global
int _key_event_exit = 0;
end
process _key_init()
private
i;
pid;
begin
signal_action( s_kill, s_ign );
signal( type _key_init, s_kill );
signal_action( s_kill, s_dfl );
priority = 999999;
loop
_key_use ^= 1;
for ( i = 0; i < 127; i++ )
_key_state[ i ][ _key_use ] = key( i );
end
frame;
end
onexit:
if ( !_key_event_exit ) _key_init(); end
end
function _key_exit()
begin
_key_event_exit = 1;
signal( type _key_init, s_kill );
end
#define _key(k,ev) ((ev==_key_down)?( _key_state[ k ][ _key_use ] && !_key_state[ k ][ _key_use ^ 1 ] ): \
(ev==_key_up )?( !_key_state[ k ][ _key_use ] && _key_state[ k ][ _key_use ^ 1 ] ): \
( _key_state[ k ][ _key_use ]))
#endif
key_event_test.prg
import "mod_video";
import "mod_text";
#include "key_event.lib";
private
a,b,c;
begin
_key_init();
write_int(0,0,0,0,&a);
write_int(0,0,10,0,&b);
write_int(0,0,20,0,&c);
while( !_key( _ESC, _key_pressed ) )
a = _key( _5, _key_down );
b = _key( _5, _key_up );
c = _key( _5, _key_pressed );
frame;
end
_key_exit();
end
Solo necesita usarlo, como se usa en el ejemplo "key_event_test.prg".
el ejemplo detecta los eventos de la tecla _5 y de _ESC para salir.
es importante hacer _key_init(); para iniciar el modulo, y _key_exit(); para finalizarlo.
nota adicional: el controlador funciona en prioridad 1000 999999, si alguien usara _key en alguna funcion con prioridad superior, debe modificar la prioridad del controlador en el fuente key_event.lib y ponerle un valor mas alto.
se cambia a prioridad a 999999, se toma la sugerencia de windgate de usar onexit para evitar tener que cargarla cada vez que se hace un let_me_alone, y para eso se modifican algunas cosas internamente.
Muchas gracias, Splinter :)
INCOMING KARMA OVERDOSE!!!!! :D
fixeado, error demasiado estupido...
gracias Free por insistir en que no te funcionaba (karma).
Saludos
karma++ splinter :)
Grácias a ti.
Tienes un error en el código, no es getid( type _key_init ) pero si get_id( type _key_init ).
si, es cierto, lo que pasa que probe en mi pc y luego edite el post...
ya lo corrijo, gracias de nuevo
Estoy usando esta lib, aparte de esta he usado tambien la de mapeo para la Wiz.
Púes inexplicablemente, y ya lo he mirado y revisado varias veces, no se porque, pero la Wiz no responde a ningun boton :(
Alguien ha puesto las 2 en un juego para la Wiz ?
Help please :-\
Yo sólo he usado la mod_joy para gp2x/wiz y no he tenido problemas. De hecho, cojo el código que tengo del Echo y le hago un par de cambios y me va de miedo (tengo todo controlado desde un include, su respectivo .h y algunas variables/constantes que están el el prg principal, que no deberían). Los cambios se deben a que como en Echo no uso todos los botones, pues no todos están mapeados.
Lo malo es que ahora no puedo ponerme a explicar su funcionamiento (no sólo por el tiempo, esta vez).
Simplemente decir: karmón. Esto abre muchísimas posibilidades.
wiz no tiene teclas, son joys.
Quien ha mencionado 'teclas' ? :D
Quote from: FreeYourMind on July 14, 2010, 06:37:47 PM
Estoy usando esta lib, aparte de esta he usado tambien la de mapeo para la Wiz.
Púes inexplicablemente, y ya lo he mirado y revisado varias veces, no se porque, pero la Wiz no responde a ningun boton :(
Alguien ha puesto las 2 en un juego para la Wiz ?
Help please :-\
este modulo es para teclas, wiz no tiene teclas tiene joys y botones de joys.
updateado el modulo, para mejorar la forma de detectar si esta ya corriendo el controlador.
Lo se. Pero no he dicho lo contrario nunca, sólo he dicho que por una razón que todavia no he descubierto, no me van los botones en la wiz.
Por cierto Splinter, necesito urgentemente tu opinion sobre el rescalado a la resolución 224x256 en la Wiz.
Porque con Bennu no funciona en la Wiz usando esta resolución ? En mame el juego original a la misma resolución si funciona, con lo que claramente se nota que la Wiz la soporta.
A que piensas que es debido ?
Esto me tiene indignado...
entonces no te entendi lo que preguntabas.
por favor, lo del resize, preguntalo en el hilo correspondiente.
Para cuando una version con eventos down y up para los botones de Wiz/Canoo ??
SplinterGU, 2 cosas con respecto a estos códigos:
Cuando pones a ^= b; que hace '^='?
¿Qué se supone que debe hacer el ejemplo? Porque a mi me salen los 3 ceros, y por muchas teclas que toco no hace nada.
^ es xor exclusivo.
corre el ejemplo y vas a ver como funciona, evidentemente los eventos solo estan visibles 1 vez por frame, salvo el pressed.
Pero, en el ejemplo que he compilado en mi Ubuntu lo único que hace es mostrarme 3 ceros en pantalla, nada más.
Si quieres te subo un video demostrativo.
el ejemplo del primer post del hilo esta probado en ubuntu, y funciona.
cuando pulsas la tecla '5', se ve un 1 rapido y luego permanece en 0, y lo mismo cuando la soltas, el ultimo mientras tengas pulsada la tecla '5' da 1.
linea 1, presionas la tecla
linea 2, soltas la tecla
linea 3, mientras esta pulsada (equivalente a key normal)
Ok, gracias por la información.
Nota, no dudaba de que no funcionase porque fuese Ubuntu, puesto que BennuGD es multiplataforma, to chupiguay y to pitufeante ;D
Ya lo he visto, SplinterGU.
Es que, cuando sabes lo que buscas y donde lo encuentras más rápido :P
A implementarlo de cabeza :D
Otra cosa Splinter, cuando sale en el compilador:
error: Incorrect number of parameters. Function: KEY MinParams: 1. ("_KEY_UP")
Cuando el asunto es:
key(_enter,_key_down)
¿Por qué pasa esto?
Edito: Ya lo he visto, me falta un _ antes del key.
:D
se cambia a prioridad a 999999, se toma la sugerencia de windgate de usar onexit para evitar tener que cargarla cada vez que se hace un let_me_alone, y para eso se modifican algunas cosas internamente.
Ok, veré que se hacer.
¿Has contemplado el integrar esta librería directamente en Bennu?.
No lo sé seguro, pero con un par de cambios en la libsdlhandler y en la mod_key, probablemente se podría integrar ¿no?.
Lo que realmente interesa es que soporte eventos down y up en Wiz/Caanoo y ports de mesa...
la libkey y la mod_key...
Eso :D
Splinter, me harias muy feliz si adaptas este modulo a que funcione tambien con las portatiles. Me hace mucha falta, ya he tenido muchos dolores de cabeza por no tener algo así en las portatiles, y no se por donde pegarle al código. Seria sin duda de mucha utilidad a la comunidad y simplificaria mucho programar los juegos.
Gracias :D
voy a armar una jkey.lib 2.0 pronto, con cosas como poder remapear el teclado con variables de enviroment y cosas asi.
No se si te lo han dicho pero tu actual jlib no funciona en algunas caanoo's, por lo menos en las mias no van, creo que depende del firmware, es por eso que uso mis propias funciones para los joys de las portatiles, si armas una lib2 con los eventos tendré que ver si realmente ya chuta al 100%
seguramente no estas iniciando el controlador, la jlib no depende de nada del firmware, si te funciona el joy, funciona la jlib
Ya pero ten en cuenta que el mismo codigo si responde en Wiz, o acaso en Wiz no es necesario iniciarlo ?
Puedes ver el codigo, te doy el ejemplo del juego de linkernel 'Operation Fenix' ese mismo codigo lo adapto el para las portatiles y solo funcionaba en mi Wiz, tuve que replanzarla por mi codigo para que funcionara tambien en mi Caanoo.
en mis caanoo la he probado con todos los firms que he tenido y funciona.
el firm no tiene nada que ver, quizas la version SDL, no lo se... sin mas datos no puedo decir mucho.