Question: How can you implement a queue in GameMaker?
Answer
GameMaker Language (GML) does not have a built-in queue data type, but it is possible to implement a queue using arrays or lists. Below is an example of how you could implement a queue with an array.
// Create a new queue var queue = []; // Function to add elements to the end of the queue function queue_enqueue(element) { array_push(queue, element); } // Function to remove and return the element at the start of the queue function queue_dequeue() { if (array_length_1d(queue) > 0) { var element = queue[0]; queue = array_delete(queue, 0, 1); return element; } return undefined; // Return undefined if the queue is empty } // Function to get the element at the start of the queue without removing it function queue_peek() { if (array_length_1d(queue) > 0) { return queue[0]; } return undefined; // Return undefined if the queue is empty }
Alternatively, you can use the ds_list data structure as a queue in GameMaker, as it has functions that closely match queue operations: ds_list_add
for enqueue, and ds_list_delete
for dequeue.
Here's an implementation using ds_list
:
// Create a new queue var queue = ds_list_create(); // Function to add elements to the end of the queue function queue_enqueue(element) { ds_list_add(queue, element); } // Function to remove and return the element at the start of the queue function queue_dequeue() { if (!ds_list_empty(queue)) { var element = ds_list_find_value(queue, 0); ds_list_delete(queue, 0); return element; } return undefined; // Return undefined if the queue is empty } // Function to get the element at the start of the queue without removing it function queue_peek() { if (!ds_list_empty(queue)) { return ds_list_find_value(queue, 0); } return undefined; // Return undefined if the queue is empty }
Remember to destroy your ds_list
when you're done with it to prevent memory leaks:
ds_list_destroy(queue);
In both examples, queue_enqueue
adds an element to the end of the queue, queue_dequeue
removes and returns the element from the beginning of the queue, and queue_peek
gets the element at the front of the queue without removing it.
Choose arrays if you're looking for a faster performance for smaller queues, and ds_list
if you require more complex data operations or expect the queue to become quite large.
Was this content helpful?
Other Common Game Engines Questions (and Answers)
- Can You Use C# in Unreal Engine?
- What Games Use Unreal Engine 5?
- Is Unreal Engine Open Source?
- What is Unreal Engine?
- Can Unreal Engine make 2D games?
- Does Unreal Engine Use C++?
- Does Unreal Engine Use Python?
- What Language Does Unreal Engine Use?
- Does Unreal Engine Use JavaScript?
- Does Unreal Engine work on Linux?
- How Do I Uninstall Unreal Engine 5?
- Is Blender or Unreal Engine Better?
Free System Design on AWS E-Book
Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.
Start building today
Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.