PRIVATE jsdev AS Process
PUBLIC SUB _new(OPTIONAL device AS String)
IF device = "" THEN device = "/dev/input/js0"
' the interpreter dies when we try to read from /dev/input/js0 as a file
' saying "invalid argument", so we have to run cat
jsdev = EXEC ["cat", device] FOR READ AS "Device"
END
PUBLIC SUB Close()
' kill the cat process if it's still going
TRY jsdev.Kill
END
PUBLIC SUB Device_Read()
DIM stamp AS Integer
DIM value AS Short
DIM myevent AS Byte
DIM number AS Byte
DIM test AS String
' each joystick event produces 8 bytes
READ #jsdev, stamp, 4 ' 4 bytes
READ #jsdev, value, 2 ' 2 bytes
READ #jsdev, myevent, 1 ' 1 byte
READ #jsdev, number, 1 ' 1 byte
IF myevent AND 1 THEN ' button
IF value THEN ' pressed
PRINT "Got button press"
RAISE ButtonPress(number)
ELSE ' released
PRINT "Got button release"
RAISE ButtonRelease(number)
ENDIF
ELSE IF myevent AND 2 THEN ' joystick axis
RAISE StickMove(number, value)
ELSE
PRINT "Unhandled event: myevent is " & myevent
ENDIF
END
EVENT ButtonPress(ButtonNum AS Integer)
EVENT ButtonRelease(ButtonNum AS Integer)
EVENT StickMove(Axis AS Integer, Position AS Integer)
PUBLIC SUB _new(OPTIONAL device AS String)
IF device = "" THEN device = "/dev/input/js0"
' the interpreter dies when we try to read from /dev/input/js0 as a file
' saying "invalid argument", so we have to run cat
jsdev = EXEC ["cat", device] FOR READ AS "Device"
END
PUBLIC SUB Close()
' kill the cat process if it's still going
TRY jsdev.Kill
END
PUBLIC SUB Device_Read()
DIM stamp AS Integer
DIM value AS Short
DIM myevent AS Byte
DIM number AS Byte
DIM test AS String
' each joystick event produces 8 bytes
READ #jsdev, stamp, 4 ' 4 bytes
READ #jsdev, value, 2 ' 2 bytes
READ #jsdev, myevent, 1 ' 1 byte
READ #jsdev, number, 1 ' 1 byte
IF myevent AND 1 THEN ' button
IF value THEN ' pressed
PRINT "Got button press"
RAISE ButtonPress(number)
ELSE ' released
PRINT "Got button release"
RAISE ButtonRelease(number)
ENDIF
ELSE IF myevent AND 2 THEN ' joystick axis
RAISE StickMove(number, value)
ELSE
PRINT "Unhandled event: myevent is " & myevent
ENDIF
END
EVENT ButtonPress(ButtonNum AS Integer)
EVENT ButtonRelease(ButtonNum AS Integer)
EVENT StickMove(Axis AS Integer, Position AS Integer)
Los 3 eventos funcionan pero ButtonPress() solo se ejecuta una vez.
Me explico:
Si quiero que mientras esté pesionado un boton, el formulario se mueva 1 pixel a a derecha, no me vale con poner en el evento buttonpress()
Solo lo hace una vez, y para que se mueva tengo que estar presionando repetidamente el boton.
¿Alguna idea para solucionarlo?