Keyboard Input

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.

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:

Virtual Key Constant (vk_*)
ConstantDescription
vk_nokeykeycode representing that no key is pressed
vk_anykeykeycode representing that any key is pressed
vk_leftkeycode for the left arrow key
vk_rightkeycode for the right arrow key
vk_upkeycode for the up arrow key
vk_downkeycode for the down arrow key
vk_enterenter key
vk_escapeescape key
vk_spacespace key
vk_shifteither of the shift keys
vk_controleither of the control keys
vk_altalt key
vk_backspacebackspace key
vk_tabtab key
vk_homehome key
vk_endend key
vk_deletedelete key
vk_insertinsert key
vk_pageuppageup key
vk_pagedownpagedown key
vk_pausepause/break key
vk_printscreenprintscreen/sysrq key
vk_f1 ... vk_f12keycode for the function keys F1 to F12
vk_numpad0 ... vk_numpad9number keys on the numeric keypad
vk_multiplymultiply key on the numeric keypad
vk_dividedivide key on the numeric keypad
vk_addadd key on the numeric keypad
vk_subtractsubtract key on the numeric keypad
vk_decimaldecimal dot keys on the numeric keypad
vk_lshiftleft shift key
vk_lcontrolleft control key
vk_laltleft alt key
vk_rshiftright shift key
vk_rcontrolright control key
vk_raltright alt key

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");
}

Function Reference

General

NOTE These functions will not work when using an on-screen Virtual Keyboard.

Simulating Keypresses

Keyboard State & Input

NOTE When using the Virtual Keyboard, only the keyboard_string variable will be updated with the keyboard input.