Autor Tema: Mejorar KEY  (Leído 12527 veces)

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12905
  • Karma: 377
Re: Mejorar KEY
« Respuesta #45 en: Julio 06, 2010, 08:58:00 pm »
Pues no se me habia ocurrido usarla internamente desde la funcion pero aquí va

Código: [Seleccionar]
CONST
_RELEASED = 0;
_PRESS = 1;
END
GLOBAL
int state_key[127][1];
END
FUNCTION int keys ( int key_c , int mode )

BEGIN
        IF (!exists ( type k ) )
                k();
        END
SWITCH ( MODE )
CASE _RELEASED:
IF ( key ( key_c ) )
state_key[key_c][_released] = 1;
RETURN FALSE;
END
IF ( !KEY ( key_c ) && state_key[key_c][_released] > 0 )
state_key[key_c][_released] = 2;
RETURN TRUE;
END
END
CASE _PRESS:
IF ( KEY ( key_c ) && ( state_key[key_c][_press] == 0 || state_key[key_c][_press] == 2) )
state_key[key_c][_press] = 2;
RETURN TRUE;
END
IF ( !KEY ( key_c ) && state_key[key_c][_press] > 0 )
state_key[key_c][_press] = 0;
RETURN FALSE;
END
END
END
END
Código: [Seleccionar]
PROCESS k ()
PRIVATE
int i;
BEGIN
loop
frame;
for (i=0;i<127;i++)
if (!key (i))
if ( state_key[i][0] == 2 )
state_key[i][0] = 0;
end
else
if ( state_key[i][1] == 2 )
state_key[i][1] = 1;
end
end
end
end
END
Ademas con esto funciona y no tiene problemas con los let_me_alone() que decia SplinterGU, aparte de no necesitar llamar el proceso.

ja, pero esto es el primer codigo que puse yo... :P

lo malo de esto es, que si bien evitar hacer el init, los let_me_alone, etc, por cada llamada a la funcion de testeo, estas recorriendo la lista de procesos para verificar si existe el controlador... es poco optimo, por eso lo quite.
« última modificación: Julio 06, 2010, 09:00:41 pm por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12905
  • Karma: 377
Re: Mejorar KEY
« Respuesta #46 en: Julio 06, 2010, 09:03:31 pm »
Vale, de momento pongo la tuya (me lo apunto para mañana que hoy ya no pico más  ;D).
Os doy un karma a ambos.
Grácias.



como puede ser que no te funciona la mia, y esta si, si esta ultima es el mismo codigo que puse yo anteriormente, salvo que un poco mas rebuscado?

perdon por el edit a tu post, puse modificar en vez de citar... :P
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JMP

  • Newbie
  • *
  • Mensajes: 45
  • Karma: 13
Re: Mejorar KEY
« Respuesta #47 en: Julio 06, 2010, 09:09:44 pm »
No pasa nada por el edit, en serio que no me he dado cuenta de la similitud del codigo hasta que me lo has dicho :P,con lo del fallo de FreeYourMind creo que si sube el codigo completo podriamos ver mejor en que falla.

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12905
  • Karma: 377
Re: Mejorar KEY
« Respuesta #48 en: Julio 06, 2010, 09:23:45 pm »
si, al final me va a obligar a que lo tenga que implementar en C, pero lo voy a tener que hacer como un modulo opcion, para evitar si se quiere la carga adicional que va a meter esto.

no puedo creer que no le funcione, los ejemplos son bien simples, y funcionan.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5684
  • Karma: 128
    • GECA soft
Re: Mejorar KEY
« Respuesta #49 en: Julio 06, 2010, 09:26:31 pm »
Lo uso en la funcion del juego, el esqueleto con sólo el uso de la key ya os lo he puesto.

Prueba a hacerlo en tu ejemplo tambien dentro de un loop con un if a ver si te funciona.



Program blabla

......


BEGIN

Game();

END



PROCESS Game();

BEGIN


....

_key_init();

  LOOP


if ( _key( _5, _key_down ) )
       Creditos += 1;
END

IF (key(_esc) OR exit_status == 1)
       exit("esta si funciona",0);
    END

  FRAME;
  END

END
« última modificación: Julio 06, 2010, 09:33:52 pm por FreeYourMind »

JMP

  • Newbie
  • *
  • Mensajes: 45
  • Karma: 13
Re: Mejorar KEY
« Respuesta #50 en: Julio 07, 2010, 08:07:29 am »
Lo he probado y funciona perfecto, no se como no te puede ir.

Código: [Seleccionar]
PROGRAM buscaminas;

INCLUDE "DLL/import.prg";
INCLUDE "prg/buscaminas.prg ";
INCLUDE "key_event.lib";


BEGIN
RAND_SEED ( time ( ) );
set_mode ( 800 , 600 , 32 , MODE_WINDOW );
set_fps ( 45 , 0);
_key_init();

load_fpg ( "images/buscaminas.fpg" );
LOOP
IF ( _key( _5, _key_down ) )
puntero();
campo();
BREAK;
END
FRAME;
END

END

SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12905
  • Karma: 377
Re: Mejorar KEY
« Respuesta #51 en: Julio 07, 2010, 08:21:46 am »
Lo he probado y funciona perfecto, no se como no te puede ir.

Código: [Seleccionar]
PROGRAM buscaminas;

INCLUDE "DLL/import.prg";
INCLUDE "prg/buscaminas.prg ";
INCLUDE "key_event.lib";


BEGIN
RAND_SEED ( time ( ) );
set_mode ( 800 , 600 , 32 , MODE_WINDOW );
set_fps ( 45 , 0);
_key_init();

load_fpg ( "images/buscaminas.fpg" );
LOOP
IF ( _key( _5, _key_down ) )
puntero();
campo();
BREAK;
END
FRAME;
END

END

gracias por probarlo... karma para vos.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

JMP

  • Newbie
  • *
  • Mensajes: 45
  • Karma: 13
Re: Mejorar KEY
« Respuesta #52 en: Julio 07, 2010, 08:57:16 am »
FreeYourMind prueba esto te tiene que funcionar si o si.

Código: [Seleccionar]
PROGRAM test;

import "mod_video";
import "mod_text";
INCLUDE "key_event.lib";


BEGIN
set_mode ( 800 , 600 , 32 , MODE_WINDOW );
set_fps ( 45 , 0);
_key_init();

LOOP
IF ( _key( _5, _key_up ) )
write(0,300,100,0,"Funciona");
END
FRAME;
END

END

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5684
  • Karma: 128
    • GECA soft
Re: Mejorar KEY
« Respuesta #53 en: Julio 07, 2010, 03:44:11 pm »
Voy a probarlo.

panreyes

  • Administrator
  • *****
  • Mensajes: 2235
  • Karma: 81
    • panreyes.com
Re: Mejorar KEY
« Respuesta #54 en: Julio 07, 2010, 03:53:51 pm »
Conste que yo ya lo he incluído en un proyecto y funciona DELUXE :)

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5684
  • Karma: 128
    • GECA soft
Re: Mejorar KEY
« Respuesta #55 en: Julio 07, 2010, 03:56:23 pm »
No funciona nada....
A ver, yo uso las funciones de Splinter internamente, o sea, no uso el import, os pongo la estrutura de como declaro sus variables.

Program blala;

CONST

....

#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 ]))

#define _key_pressed    0
#define _key_down       1
#define _key_up         2



global

_key_use = 0;
_key_state[127][1];


....


begin
set_mode(224, 256, 16);
set_fps(24, 0);
....
game();

end


PROCESS game();

BEGIN

....


_key_init();

  LOOP


IF ( _key( _6, _key_up ) )
   write(0,100,100,0,"Funciona");
END
   

   if ( _key( _5, _key_down ) )
       Creditos += 1;
end

IF (key(_esc) OR exit_status == 1)
       exit("esto si funciona",0);
    END

  FRAME;
  END

END


process _key_init()
private
    ii;
    pid;
begin
    if ( ( pid = exists( type _key_init ) ) && pid.id != id ) return; end

    priority = 1000;

    loop
        _key_use ^= 1;
        for ( ii = 0; ii < 127; ii++ )
            _key_state[ ii ][ _key_use ] = key( ii );
        end
        frame;
    end
end

function _key_exit()
begin
    signal( type _key_init, s_kill );
end

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5684
  • Karma: 128
    • GECA soft
Re: Mejorar KEY
« Respuesta #56 en: Julio 07, 2010, 04:02:51 pm »
Ahora si que pienso que el problema tiene un origen desconocido y raro.
He separao las funciones en la lib, hago el import como teneis en el ejemplo, y es igual, no funciona....

Voy a compilar vuestro ejemplo por separado a ver.

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5684
  • Karma: 128
    • GECA soft
Re: Mejorar KEY
« Respuesta #57 en: Julio 07, 2010, 04:07:10 pm »
Acabo de probar tu test.prg con la misma lib que estaba usando en el juego. Tu test si ha funcionado....

Ahora estoy loco, hay algo en mi codigo que entra en conflicto internamente y hace que no funcione.....

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5684
  • Karma: 128
    • GECA soft
Re: Mejorar KEY
« Respuesta #58 en: Julio 07, 2010, 04:11:28 pm »
He dado en el clavo  :D, esto no funciona:

Código: [Seleccionar]
PROGRAM test;

import "mod_video";
import "mod_text";
INCLUDE "key_event.lib";


BEGIN
set_mode ( 800 , 600 , 32 , MODE_WINDOW );
set_fps ( 45 , 0);
Game();
END

PROCESS Game();
BEGIN

_key_init();

LOOP
IF ( _key( _5, _key_up ) )
write(0,300,100,0,"Funciona");
END
FRAME;
END

END

FreeYourMind

  • Hero Member
  • *****
  • Mensajes: 5684
  • Karma: 128
    • GECA soft
Re: Mejorar KEY
« Respuesta #59 en: Julio 07, 2010, 06:09:29 pm »
JMP ahora tambien he probado tu ultima version, donde llamas k dentro de keys, y sigue igual, tampoco funciona, se repite creditos++.