Bennu Game Development

Foros en Español => Recursos => Mensaje iniciado por: SplinterGU en Julio 01, 2010, 10:58:16 pm

Título: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Julio 01, 2010, 10:58:16 pm
key_event.lib
Código: [Seleccionar]
#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
Código: [Seleccionar]
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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: josebita en Julio 01, 2010, 11:08:42 pm
Muchas gracias, Splinter :)
Título: Re: key_event (libreria de eventos down y up)
Publicado por: panreyes en Julio 02, 2010, 06:34:22 am
INCOMING KARMA OVERDOSE!!!!! :D
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Julio 07, 2010, 06:24:05 pm
fixeado, error demasiado estupido...

gracias Free por insistir en que no te funcionaba (karma).

Saludos
Título: Re: key_event (libreria de eventos down y up)
Publicado por: Prg en Julio 07, 2010, 06:50:06 pm
karma++ splinter :)
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Julio 07, 2010, 07:31:12 pm
Grácias a ti.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Julio 07, 2010, 08:51:52 pm
Tienes un error en el código, no es getid( type _key_init ) pero si get_id( type _key_init ).
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Julio 08, 2010, 12:40:21 am
si, es cierto, lo que pasa que probe en mi pc y luego edite el post...

ya lo corrijo, gracias de nuevo
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Julio 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  :-\
Título: Re: key_event (libreria de eventos down y up)
Publicado por: Drumpi en Julio 14, 2010, 07:58:59 pm
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).
Título: Re: key_event (libreria de eventos down y up)
Publicado por: DCelso en Julio 15, 2010, 02:46:16 pm
Simplemente decir: karmón. Esto abre muchísimas posibilidades.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Julio 15, 2010, 06:47:11 pm
wiz no tiene teclas, son joys.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Julio 15, 2010, 07:08:31 pm
Quien ha mencionado 'teclas' ?  :D
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Julio 15, 2010, 08:13:22 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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Julio 15, 2010, 08:32:30 pm
updateado el modulo, para mejorar la forma de detectar si esta ya corriendo el controlador.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Julio 15, 2010, 08:33:01 pm
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...
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Julio 15, 2010, 10:46:23 pm
entonces no te entendi lo que preguntabas.

por favor, lo del resize, preguntalo en el hilo correspondiente.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Agosto 17, 2010, 06:05:20 pm
Para cuando una version con eventos down y up para los botones de Wiz/Canoo ??
Título: Re: key_event (libreria de eventos down y up)
Publicado por: oriun en Noviembre 20, 2010, 04:48:06 pm
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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Noviembre 20, 2010, 08:29:56 pm
^ 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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: oriun en Noviembre 20, 2010, 10:12:55 pm
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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Noviembre 20, 2010, 10:43:17 pm
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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Noviembre 20, 2010, 10:44:17 pm
linea 1, presionas la tecla
linea 2, soltas la tecla
linea 3, mientras esta pulsada (equivalente a key normal)
Título: Re: key_event (libreria de eventos down y up)
Publicado por: oriun en Noviembre 20, 2010, 11:43:58 pm
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
Título: Re: key_event (libreria de eventos down y up)
Publicado por: oriun en Noviembre 20, 2010, 11:45:42 pm
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
Título: Re: key_event (libreria de eventos down y up)
Publicado por: oriun en Noviembre 21, 2010, 12:08:47 am
Otra cosa Splinter, cuando sale en el compilador:
Código: [Seleccionar]
error: Incorrect number of parameters. Function: KEY MinParams: 1. ("_KEY_UP")Cuando el asunto es:
Código: [Seleccionar]
key(_enter,_key_down)¿Por qué pasa esto?

Edito: Ya lo he visto, me falta un _ antes del key.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Noviembre 21, 2010, 12:22:11 am
:D
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Noviembre 22, 2010, 01:33:23 am
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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: oriun en Noviembre 22, 2010, 07:10:19 am
Ok, veré que se hacer.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: josebita en Noviembre 23, 2010, 10:21:11 pm
¿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?.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Noviembre 23, 2010, 10:34:46 pm
Lo que realmente interesa es que soporte eventos down y up en Wiz/Caanoo y ports de mesa...
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Noviembre 23, 2010, 11:20:37 pm
la libkey y la mod_key...
Título: Re: key_event (libreria de eventos down y up)
Publicado por: josebita en Noviembre 23, 2010, 11:27:20 pm
Eso :D
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Junio 13, 2011, 05:42:01 pm
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
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Junio 13, 2011, 07:03:34 pm
voy a armar una jkey.lib 2.0 pronto, con cosas como poder remapear el teclado con variables de enviroment y cosas asi.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Junio 13, 2011, 08:01:33 pm
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%
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Junio 14, 2011, 02:48:49 pm
seguramente no estas iniciando el controlador, la jlib no depende de nada del firmware, si te funciona el joy, funciona la jlib
Título: Re: key_event (libreria de eventos down y up)
Publicado por: FreeYourMind en Junio 14, 2011, 03:53:59 pm
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.
Título: Re: key_event (libreria de eventos down y up)
Publicado por: SplinterGU en Junio 14, 2011, 06:56:46 pm
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.