DEVICEINPUT: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 9: Line 9:


{{PageParameters}}
{{PageParameters}}
* Use the _DEVICEINPUT  {{Parameter|device%}} [[INTEGER]] returned to find the number of the controller device being used.
* Use the {{Parameter|device%}} [[INTEGER]] returned to find the number of the controller device being used.
* A literal specific {{Parameter|device_number%}} parameter can be used to return -1 if active or 0 if inactive. {{Text|EX: '''WHILE _DEVICEINPUT(2)'''|green}}
* A literal specific {{Parameter|device_number%}} parameter can be used to return -1 if active or 0 if inactive, e.g. {{InlineCode}}{{Cl|WHILE}} {{Cl|_DEVICEINPUT(2)}}{{InlineCodeEnd}}.




Line 18: Line 18:
* When a device button is pressed or a scroll wheel or axis is moved, the device number will be returned.
* 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.
* 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.
* [[_LASTBUTTON]], [[_LASTAXIS]], or [[_LASTWHEEL]] will indicate the number of functions available with the specified {{Parameter|device%}} number.
* User input events can be monitored reading valid numbered [[_AXIS]], [[_BUTTON]], [[_BUTTONCHANGE]] or [[_WHEEL]] functions.
* User input events can be monitored reading valid numbered [[_AXIS]], [[_BUTTON]], [[_BUTTONCHANGE]] or [[_WHEEL]] functions.
* ''Note:'' [[ON...GOSUB|ON _DEVICEINPUT GOSUB]] keyboard, mouse, gamecontrol can be used to control the devices 1,2 and 3, etc.
; Note: {{InlineCode}}{{Cl|ON...GOSUB|ON _DEVICEINPUT GOSUB}} keyboard, mouse, gamecontrol{{InlineCodeEnd}} could be used to branch to device specific handler routines.




{{PageExamples}}
{{PageExamples}}
''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}}
Line 52: Line 52:
----
----


''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}}
Line 69: Line 69:
----
----


''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}}
Line 104: Line 104:
* [[_BUTTON]], [[_AXIS]], [[_WHEEL]]
* [[_BUTTON]], [[_AXIS]], [[_WHEEL]]
* [[STRIG]], [[STICK]]
* [[STRIG]], [[STICK]]
* [[ON...GOSUB]] {{Text|(numerical events)}}
* [[ON...GOSUB]]
* [[Controller Devices]]
* [[Controller Devices]]




{{PageNavigation}}
{{PageNavigation}}

Revision as of 20:16, 11 May 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.
Note
ON _DEVICEINPUT GOSUB keyboard, mouse, gamecontrol could be used to branch to device specific handler routines.


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

PRINT
DO
    x = _DEVICEINPUT
    IF x THEN PRINT "Device ="; x;
LOOP UNTIL INKEY$ = CHR$(27) 'escape key exit

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)
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
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
Report a broken link