DEVICEINPUT: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
Tag: Reverted
No edit summary
 
(9 intermediate revisions by the same user not shown)
Line 26: Line 26:
; Example 1: Checking device controller interfaces and finding out what devices are being used.
; Example 1: Checking device controller interfaces and finding out what devices are being used.
{{CodeStart}}
{{CodeStart}}
{{Cl|FOR}} i = {{Text|1|#F580B1}} {{Cl|TO}} {{Cl|_DEVICES}}
{{Cl|FOR}} i% = {{Text|1|#F580B1}} {{Cl|TO}} {{Cl|_DEVICES}}
     {{Cl|PRINT}} {{Cl|STR$}}(i) + {{Text|<nowiki>") "</nowiki>|#FFB100}} + {{Cl|_DEVICE$}}(i)
     {{Cl|PRINT}} {{Cl|STR$}}(i%) + {{Text|<nowiki>") "</nowiki>|#FFB100}} + {{Cl|_DEVICE$}}(i%)
     {{Cl|PRINT}} {{Text|<nowiki>"Button:"</nowiki>|#FFB100}}; {{Cl|_LASTBUTTON}}(i); {{Text|<nowiki>",Axis:"</nowiki>|#FFB100}}; {{Cl|_LASTAXIS}}(i); {{Text|<nowiki>",Wheel:"</nowiki>|#FFB100}}; {{Cl|_LASTWHEEL}}(i)
     {{Cl|PRINT}} {{Text|<nowiki>"Button:"</nowiki>|#FFB100}}; {{Cl|_LASTBUTTON}}(i%); {{Text|<nowiki>",Axis:"</nowiki>|#FFB100}}; {{Cl|_LASTAXIS}}(i%); {{Text|<nowiki>",Wheel:"</nowiki>|#FFB100}}; {{Cl|_LASTWHEEL}}(i%)
{{Cl|NEXT}}
{{Cl|NEXT}} i%


{{Cl|PRINT}}
{{Cl|PRINT}}
{{Cl|DO}}
{{Cl|DO}}
     x = {{Cl|_DEVICEINPUT}}
     x% = {{Cl|_DEVICEINPUT}}
     {{Cl|IF}} x {{Cl|THEN}} {{Cl|PRINT}} {{Text|<nowiki>"Device ="</nowiki>|#FFB100}}; x;
     {{Cl|IF}} x% {{Cl|THEN}} {{Cl|PRINT}} {{Text|<nowiki>"Device ="</nowiki>|#FFB100}}; x%;
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}({{Text|27|#F580B1}}) {{Text|<nowiki>'escape key exit</nowiki>|#919191}}
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}({{Text|27|#F580B1}})


{{Cl|END}}
{{Cl|END}}
Line 49: Line 49:
{{OutputEnd}}
{{OutputEnd}}
{{PreStart}}
{{PreStart}}
'''Note:'''
'''Note'''
Mouse events must be within the program screen area. Keyboard presses
Mouse events must be within the program screen area. Keyboard presses
are registered only when program is in focus.{{PreEnd}}
are registered only when program is in focus.
{{PreEnd}}


----
----
Line 57: Line 58:
; Example 2: Why does a mouse have 3 wheels? Relative x and y movements can be read using the first 2 [[_WHEEL]] reads.
; Example 2: Why does a mouse have 3 wheels? Relative x and y movements can be read using the first 2 [[_WHEEL]] reads.
{{CodeStart}}
{{CodeStart}}
ignore = {{Cl|_MOUSEMOVEMENTX}} {{Text|<nowiki>'dummy call to put mouse into relative movement mode</nowiki>|#919191}}
ignore% = {{Cl|_MOUSEMOVEMENTX}} {{Text|<nowiki>'dummy call to put mouse into relative movement mode</nowiki>|#919191}}


{{Cl|PRINT}} {{Text|<nowiki>"Move your mouse and/or your mouse wheel (ESC to exit)"</nowiki>|#FFB100}}
{{Cl|PRINT}} {{Text|<nowiki>"Move your mouse and/or your mouse wheel (ESC to exit)"</nowiki>|#FFB100}}


d = {{Cl|_DEVICES}} {{Text|<nowiki>' always read number of devices to enable device input</nowiki>|#919191}}
d% = {{Cl|_DEVICES}} {{Text|<nowiki>'always read number of devices to enable device input</nowiki>|#919191}}
{{Cl|DO}}: {{Cl|_LIMIT}} {{Text|30|#F580B1}} {{Text|<nowiki>'main loop</nowiki>|#919191}}
{{Cl|DO}}
    {{Cl|_LIMIT}} {{Text|30|#F580B1}} {{Text|<nowiki>'main loop</nowiki>|#919191}}
     {{Cl|DO...LOOP|DO WHILE}} {{Cl|_DEVICEINPUT}}({{Text|2|#F580B1}}) {{Text|<nowiki>'loop only runs during a device 2 mouse event</nowiki>|#919191}}
     {{Cl|DO...LOOP|DO WHILE}} {{Cl|_DEVICEINPUT}}({{Text|2|#F580B1}}) {{Text|<nowiki>'loop only runs during a device 2 mouse event</nowiki>|#919191}}
         {{Cl|PRINT}} {{Cl|_WHEEL}}({{Text|1|#F580B1}}), {{Cl|_WHEEL}}({{Text|2|#F580B1}}), {{Cl|_WHEEL}}({{Text|3|#F580B1}})
         {{Cl|PRINT}} {{Cl|_WHEEL}}({{Text|1|#F580B1}}), {{Cl|_WHEEL}}({{Text|2|#F580B1}}), {{Cl|_WHEEL}}({{Text|3|#F580B1}})
     {{Cl|LOOP}}
     {{Cl|LOOP}}
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}({{Text|27|#F580B1}})
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}({{Text|27|#F580B1}})
{{Cl|END}}
{{CodeEnd}}
{{CodeEnd}}
{{PreStart}}
{{PreStart}}
'''Explanation:'''
'''Explanation'''
Referencing the [[_MOUSEMOVEMENTX]] function hides the mouse and sets the
Referencing the [[_MOUSEMOVEMENTX]] function hides the mouse and sets
mouse to a relative movement mode which can be read by [[_WHEEL]].
the mouse to a relative movement mode which can be read by [[_WHEEL]].
[[_DEVICEINPUT]](2) returns -1 (true) only when the mouse is moved, scrolled
_DEVICEINPUT(2) returns -1 (true) only when the mouse is moved,
or clicked.
scrolled or clicked.
{{PreEnd}}
{{PreEnd}}


Line 80: Line 84:
; Example 3: Using [[ON...GOSUB]] with the [[_DEVICEINPUT]] number to add keyboard, mouse and game controller event procedures.
; Example 3: Using [[ON...GOSUB]] with the [[_DEVICEINPUT]] number to add keyboard, mouse and game controller event procedures.
{{CodeStart}}
{{CodeStart}}
n = {{Cl|_DEVICES}} {{Text|<nowiki>'required when reading devices</nowiki>|#919191}}
n% = {{Cl|_DEVICES}} {{Text|<nowiki>'required when reading devices</nowiki>|#919191}}
{{Cl|PRINT}} {{Text|<nowiki>"Number of devices found ="</nowiki>|#FFB100}}; n
{{Cl|PRINT}} {{Text|<nowiki>"Number of devices found ="</nowiki>|#FFB100}}; n%
{{Cl|FOR}} i = {{Text|1|#F580B1}} {{Cl|TO}} n
{{Cl|FOR}} i% = {{Text|1|#F580B1}} {{Cl|TO}} n%
     {{Cl|PRINT}} i; {{Cl|_DEVICE$}}(i) {{Text|<nowiki>' 1 = keyboard, 2 = mouse, 3 = other controller, etc.</nowiki>|#919191}}
     {{Cl|PRINT}} i%; {{Cl|_DEVICE$}}(i%) {{Text|<nowiki>'1 = keyboard, 2 = mouse, 3 = other controller, etc.</nowiki>|#919191}}
{{Cl|NEXT}}
{{Cl|NEXT}} i%
 
{{Cl|PRINT}}
{{Cl|PRINT}}
{{Cl|DO}}
    device% = {{Cl|_DEVICEINPUT}}
    {{Cl|ON}} device% {{Cl|GOSUB}} keyboard, mouse, controller {{Text|<nowiki>'must be inside program loop</nowiki>|#919191}}
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}({{Text|27|#F580B1}})


{{Cl|DO}}: device = {{Cl|_DEVICEINPUT}}
    {{Cl|ON}} device {{Cl|GOSUB}} keyboard, mouse, controller {{Text|<nowiki>'must be inside program loop</nowiki>|#919191}}
{{Cl|DO...LOOP|LOOP UNTIL}} {{Cl|INKEY$}} = {{Cl|CHR$}}({{Text|27|#F580B1}})
{{Cl|END}}
{{Cl|END}}


keyboard:
keyboard:
{{Cl|PRINT}} device; {{Text|<nowiki>"Keyboard"</nowiki>|#FFB100}};
{{Cl|PRINT}} device%; {{Text|<nowiki>"Keyboard"</nowiki>|#FFB100}};
{{Cl|RETURN}}
{{Cl|RETURN}}


mouse:
mouse:
{{Cl|PRINT}} device; {{Text|<nowiki>"Mouse "</nowiki>|#FFB100}};
{{Cl|PRINT}} device%; {{Text|<nowiki>"Mouse "</nowiki>|#FFB100}};
{{Cl|RETURN}}
{{Cl|RETURN}}


controller:
controller:
{{Cl|PRINT}} device; {{Text|<nowiki>"Game control "</nowiki>|#FFB100}};
{{Cl|PRINT}} device%; {{Text|<nowiki>"Game control "</nowiki>|#FFB100}};
{{Cl|RETURN}}
{{Cl|RETURN}}
{{CodeEnd}}
{{CodeEnd}}
{{Small|Code by Ted Weissgerber}}
{{Small|Code by Ted Weissgerber}}
{{PreStart}}
{{PreStart}}
'''Note:''' [[ON...GOSUB]] and [[ON...GOTO]] events require numerical
'''Note'''
values to match the order of line labels listed in the event used inside
[[ON...GOSUB]] and [[ON...GOTO]] events require numerical values to match
loops.
the order of line labels listed in the event used inside loops.
{{PreStart}}
{{PreEnd}}





Latest revision as of 22:32, 7 October 2023

The _DEVICEINPUT function returns the device number when a controller device button, wheel or axis event occurs.


Syntax

device% = _DEVICEINPUT
device_active% = _DEVICEINPUT(device_number%)


Parameters

  • Use the device% INTEGER returned to find the number of the controller device being used.
  • A literal specific device_number% parameter can be used to return -1 if active or 0 if inactive, e.g. WHILE _DEVICEINPUT(2).


Description

  • Use _DEVICES to find the number of controller devices available BEFORE using this function.
  • _DEVICE$ can be used to list the device names and control types using valid _DEVICES numbers.
  • When a device button is pressed or a scroll wheel or axis is moved, the device number will be returned.
  • Devices are numbered as 1 for keyboard and 2 for mouse. Other controller devices will be numbered 3 or higher if installed.
  • _LASTBUTTON, _LASTAXIS, or _LASTWHEEL will indicate the number of functions available with the specified device% number.
  • User input events can be monitored reading valid numbered _AXIS, _BUTTON, _BUTTONCHANGE or _WHEEL functions.
  • ON _DEVICEINPUT GOSUB keyboard, mouse, gamecontrol could be used to easily branch to device specific handler routines (see Example 3 below).


Examples

Example 1
Checking device controller interfaces and finding out what devices are being used.
FOR i% = 1 TO _DEVICES
    PRINT STR$(i%) + ") " + _DEVICE$(i%)
    PRINT "Button:"; _LASTBUTTON(i%); ",Axis:"; _LASTAXIS(i%); ",Wheel:"; _LASTWHEEL(i%)
NEXT i%

PRINT
DO
    x% = _DEVICEINPUT
    IF x% THEN PRINT "Device ="; x%;
LOOP UNTIL INKEY$ = CHR$(27)

END
[KEYBOARD][BUTTON]
Buttons: 512 Axis: 0 Wheels: 0
[MOUSE][BUTTON][AXIS][WHEEL]
Buttons: 3 Axis: 2 Wheels: 3
[CONTROLLER][[NAME][Microsoft Sidewinder Precision Pro (USB)]][BUTTON][AXIS]
Buttons: 9 Axis: 6 Wheels: 0

Device = 2 Device = 2
Note
 Mouse events must be within the program screen area. Keyboard presses
 are registered only when program is in focus.

Example 2
Why does a mouse have 3 wheels? Relative x and y movements can be read using the first 2 _WHEEL reads.
ignore% = _MOUSEMOVEMENTX 'dummy call to put mouse into relative movement mode

PRINT "Move your mouse and/or your mouse wheel (ESC to exit)"

d% = _DEVICES 'always read number of devices to enable device input
DO
    _LIMIT 30 'main loop
    DO WHILE _DEVICEINPUT(2) 'loop only runs during a device 2 mouse event
        PRINT _WHEEL(1), _WHEEL(2), _WHEEL(3)
    LOOP
LOOP UNTIL INKEY$ = CHR$(27)

END
Explanation
 Referencing the _MOUSEMOVEMENTX function hides the mouse and sets
 the mouse to a relative movement mode which can be read by _WHEEL.
 _DEVICEINPUT(2) returns -1 (true) only when the mouse is moved,
 scrolled or clicked.

Example 3
Using ON...GOSUB with the _DEVICEINPUT number to add keyboard, mouse and game controller event procedures.
n% = _DEVICES 'required when reading devices
PRINT "Number of devices found ="; n%
FOR i% = 1 TO n%
    PRINT i%; _DEVICE$(i%) '1 = keyboard, 2 = mouse, 3 = other controller, etc.
NEXT i%

PRINT
DO
    device% = _DEVICEINPUT
    ON device% GOSUB keyboard, mouse, controller 'must be inside program loop
LOOP UNTIL INKEY$ = CHR$(27)

END

keyboard:
PRINT device%; "Keyboard";
RETURN

mouse:
PRINT device%; "Mouse ";
RETURN

controller:
PRINT device%; "Game control ";
RETURN
Code by Ted Weissgerber
Note
 ON...GOSUB and ON...GOTO events require numerical values to match
 the order of line labels listed in the event used inside loops.


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage