Introducing Dragonfly Cloud! Learn More

Question: How do you move and handle collisions in GameMaker?

Answer

In GameMaker, moving an instance and handling collisions involves understanding the physics or logic that you want to apply when instances of objects come into contact with each other. Here is a basic explanation and code example for moving an object and handling collisions.

Basic Movement without Physics

If you're not using the built-in physics engine, movement can be done by changing the x and y properties of an instance. To move an instance while checking for collisions, you typically use functions like place_meeting(x,y,obj) to check if a position is free of collisions and move_contact_solid(dir,maxdist) to move up to a point of collision.

// Check for collision at the new position if (!place_meeting(x + hspd, y, obj_wall)) { // No collision, move horizontally x += hspd; } else { // Collision detected, resolve it // This moves the instance along the current direction until it meets a solid object move_contact_solid(direction, maxdist); // Then you could set horizontal speed to zero if you want the object to stop hspd = 0; } // Repeat the process for vertical movement if (!place_meeting(x, y + vspd, obj_wall)) { y += vspd; } else { move_contact_solid(90 * sign(vspd), abs(vspd)); vspd = 0; }

In this example, hspd and vspd are variables holding the horizontal and vertical speed of the instance, respectively. obj_wall is the object that we're checking for collisions against.

Using Built-in Physics

If you're using the built-in physics system, then moving and colliding involves applying forces or impulses to objects and letting the physics world manage the rest. Here's a basic example:

// Apply a force to move the object physics_apply_force(x, y, force_x, force_y); // The collisions are automatically handled by the physics system // But you might still want to react to them using event handlers like: // - Collision Event // - Begin Contact Event // - End Contact Event // etc.

When you're using physics, you'll often handle the collision events separately where you define what happens when objects collide.

Pixel-Perfect Collisions

GameMaker also offers functions for more complex collision checking, such as collision_point and collision_rectangle for specific pixel-perfect detection.

// Check if a specific point is colliding if (collision_point(mouse_x, mouse_y, obj_enemy, true, true)) { // Point is colliding with obj_enemy }

Remember to always adjust your collision code to fit the mechanics of your game and the behavior you wish your objects to exhibit. You might need to write more complex resolution code depending on your game's requirements.

Conclusion

To summarize, moving and colliding in GameMaker involves using functions to move your instances and detect collisions and then reacting to those collisions in a way that fits your game design. For smooth and predictable movements, ensure your logic for movement and collision handling is consistent across different frames and game states.

Was this content helpful?

White Paper

Free System Design on AWS E-Book

Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.

Free System Design on AWS E-Book

Start building today 

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.