When dealing with the keyboard in GameMaker you have a variety of functions that can be used to recognise different keyboard states like pressed or released. There are also some that store all the key presses as a string or that can tell you what the last key pressed was, as well as others that allow you to clear the keyboard state completely.
NOTE These functions are designed for Windows/Mac/Ubuntu desktop platforms only. You may find some of the built-in variables and constants aren't valid on other platforms and many of the functions won't work on mobiles.
Each input character from a key (or multiple keys) is defined by its UTF-8 code, which is a numerical value. This value can be retrieved for any character using the ord function but, GameMaker also has a series of constants for the most used keyboard special keys and a special functions. Typically you'd use a combination of ord with the keyboard_check* functions, something like this:
if keyboard_check(ord("A"))
{
hspeed = -5;
}
So, the above will check the "A" key and if it's being pressed then it'll set the horizontal speed of the object to -5. Note, that using ord in this way will only function correctly if the input string is only one character in length and is a number from 0 to 9 or a capitalised Roman character from A to Z. The function ord will return a full UTF-8 value, but the keyboard_check* functions will only detect A - Z and 0 - 9. But what if you want to use the arrow keys? Or if you want to modify an action using the "Shift" key? Well, for that GameMaker has a series of vk_* constants (vk_ stands for virtual key) that you can use in place of ord:
The following is a small example of how to use the vk_* constants:
if keyboard_check_pressed(vk_tab)
{
instance_create_layer(x, y, "Controllers", obj_Menu);
}
The above code will detect if the "Tab" key is pressed and create an instance of object obj_Menu if it is.
If you need to check for a key character that is not 0 - 9, A - Z or one of the vk_* constants, then you should be checking one of the keyboard_* variables, like keyboard_lastchar for example:
var _key = keyboard_lastchar;
if ord(_key) == ord("ç")
{
show_debug_message("ç key pressed");
}
NOTE These functions will not work when using an on-screen Virtual Keyboard.
NOTE When using the Virtual Keyboard, only the keyboard_string variable will be updated with the keyboard input.