Asynchronous Functions

GameMaker: Studio has a number of functions that permit asynchronous communication.

Before dealing with the asynchronous functions (referred to from now on as async functions) in GameMaker: Studio it may be that you are wondering what the word "asynchronous" actually means! Well, the actual dictionary definition of asynchronous is:

"pertaining to a transmission technique that does not require a common clock between the communicating devices; timing signals are derived from special characters in the data stream itself."

In the context of GameMaker: Studio, an async function is one that sends out to a web server, or asks for user input, or even streams data, while letting GameMaker: Studio continue to run without blocking. When the information callback is received a special Async Event is fired which, in turn, allows any instance with an Async Event assigned to it to execute further functions (although this does not have to be the case). So, basically, it's a way to communicate with some external resource (server, user or device) without the game or project blocking while waiting for a reply.

Why is this important? Well, since it allows GameMaker: Studio to continue functioning while sending or receiving data, and this means that you can do many things all without blocking the game loop like -

This all makes everything function in a much more fluid and unobtrusive way. It should be noted that the Async Events will be triggered for all instances that have them, so you can use an async function in one instance, and have the Asynchronous Event that deals with the reply in another one, or even various other ones. You can go here for more information on how the Asynchronous event works - Advanced Use: Asynchronous Events.


HTTP

Below you can find a list of the Async http functions available in GameMaker: Studio:

  1. http_request
  2. http_get
  3. http_get_file
  4. http_post_string

Cross Domain Issues

Please note that the above http_ functions may not function as expected due to cross domain security issues. This means that requests to your server or attempts to load resources from across domains are blocked and may appear to return blank results or 404 errors. One of the ways you can get around this is to have some server side PHP which allows certain domains to access your server (this is also a way to protect your resources and block servers that are not included in the PHP allow list).

The following is an example of the code you can use for this:

$http_origin = $_SERVER['HTTP_ORIGIN'];
if ($http_origin == "http://127.0.0.1:51268")
   {
   header('Access-Control-Allow-Origin: *');
   }


Dialogues

Previous versions of GameMaker had pop-up dialogues that blocked the runner while waiting for a response from the user. However most modern devices do not like this and will interpret the runner stopping as an error and close the app. To prevent this GameMaker: Studio has async equivalents of these functions that fulfill the same purpose as previous versions, but do not block the game runner at any time, meaning that when called the game will run as normal in the background while the user responds to the shown dialogue. Once the user has responded, a Dialogs Asynchronous Event will be called so that you can deal with the results.

Below is a list of all the available asynchronous dialogue functions:

  1. get_login_async
  2. show_message_async
  3. show_question_async
  4. get_string_async
  5. get_integer_async


Back: Reference
© Copyright YoYo Games Ltd. 2018 All Rights Reserved