Using the _key commands - Printable Version +- QB64 Phoenix Edition (https://qb64phoenix.com/forum) +-- Forum: QB64 Rising (https://qb64phoenix.com/forum/forumdisplay.php?fid=1) +--- Forum: Code and Stuff (https://qb64phoenix.com/forum/forumdisplay.php?fid=3) +---- Forum: Help Me! (https://qb64phoenix.com/forum/forumdisplay.php?fid=10) +---- Thread: Using the _key commands (/showthread.php?tid=1173) |
Using the _key commands - PhilOfPerth - 11-23-2022 Is the following sample using the _KeyClear, _Limit, and _keyhit functions correctly? (not worried about the rest at this point). It seems to be ok, but I'm not sure about placement of _limit, and whether it will be called more times than necessary. _KeyClear Print "hit a key" GetAnAction: _Limit 30 ' limit resource usage k = _KeyHit ' get code of key press Locate 12, 40: Print k; Space$(5) ' erase previous key code If k < 1 Then GoTo GetAnAction ' if there are no keys pressed, have another look - but only do this max 30 times per second Locate 13, 1: Print Space$(13); ' erase previous key code announcement Locate 13, 1 Print "ok, saw"; k ' announce key that was recognized GoTo GetAnAction ' look for another key press RE: Using the _key commands - King Mocker - 11-23-2022 Phil Add this line, Locate 10, 10: Print n:n = n + 1, Then run it Then move the _Limit 30 to be before the GetAnAction: label and run it again to see the difference. _KeyClear Print "hit a key" GetAnAction: _Limit 30 ' limit resource usage k = _KeyHit ' get code of key press Locate 12, 40: Print k; Space$(15) ' erase previous key code '### Locate 10, 10: Print n:n = n + 1 '#### If k < 1 Then GoTo GetAnAction ' if there are no keys pressed, have another look - but only do this max 30 times per second Locate 13, 1: Print Space$(20); ' erase previous key code announcement Locate 13, 1 Print "ok, saw"; k ' announce key that was recognized GoTo GetAnAction ' look for another key press RE: Using the _key commands - SMcNeill - 11-23-2022 Limit placement looks fine to me -- it's in your innermost loop, and the one where the user is going to interact with the most. From what I see, after I restructured the code to get rid of the GOTOs, you might want to move the _KEYCLEAR however. Code: (Select All) Print "hit a key" For this short of an example, I'd think the above is what you want. Just ask yourself, "Do I want to process current key hits, or hits off the keyboard buffer?" Here, it appears you're just wanting to print the code for current key hits -- thus the _KEYCLEAR before the _KEYHIT loop. If you're wanting to check the whole buffer and process it however, you'd probably want that _KEYCLEAR outside the main loop completely, and between the PRINT and the DO statement in the code above. RE: Using the _key commands - PhilOfPerth - 11-23-2022 (11-23-2022, 02:42 AM)SMcNeill Wrote: Limit placement looks fine to me -- it's in your innermost loop, and the one where the user is going to interact with the most. Thanks Steve. I think I get it, I'll go play some more. |