Question: How do you implement lighting in GameMaker?
Answer
GameMaker Studio provides a range of tools and functions that allow the creation of lighting effects, which can enhance the atmosphere and visual appeal of a game. Here is a comprehensive guide to implementing lighting in GameMaker:
Surfaces for Lighting
Surfaces in GameMaker act like canvases where you can draw anything, including light and shadows. They are crucial for dynamic lighting.
// Create a surface if it does not exist if (!surface_exists(light_surface)) { light_surface = surface_create(room_width, room_height); } // Set the target surface to light_surface surface_set_target(light_surface); draw_clear_alpha(c_black, 0); // Clear the surface with a fully transparent color // Reset drawing target surface_reset_target();
Basic Light Sources
You create a light source by drawing a bright shape (like a circle for a soft light) on the light surface.
// Draw a white circle on the light surface for a basic light var radius = 128; var x = mouse_x; var y = mouse_y; surface_set_target(light_surface); draw_set_blend_mode(bm_add); draw_circle_color(x, y, radius, c_white, c_yellow, false); draw_set_blend_mode(bm_normal); surface_reset_target();
Shadows
Shadows can be created by using primitives or sprites to represent the absence of light. This usually involves subtractive blending.
// Draw shadows on the light surface; they must be drawn after the lights surface_set_target(light_surface); draw_set_blend_mode(bm_subtract); draw_sprite(spr_shadow, 0, shadow_x, shadow_y); // Assuming spr_shadow is a sprite representing your shadow draw_set_blend_mode(bm_normal); surface_reset_target();
Applying Lighting to the Game
Once the light and shadows have been drawn onto the surface, apply it over the screen.
draw_surface_ext(light_surface, 0, 0, 1, 1, 0, c_white, 1); // Apply the surface with normal alpha
Optimizations
To optimize performance, only update the lighting when necessary and use lower resolution surfaces if full resolution isn't required.
Advanced Lighting
For more advanced techniques like normal mapping or dynamic shadows, you may need additional scripts and shaders. These can give a pseudo-3D effect and react realistically to moving light sources.
Remember to release any surfaces when they are no longer needed to prevent memory leaks:
if (surface_exists(light_surface)) { surface_free(light_surface); }
In conclusion, creating lighting in GameMaker involves understanding and working with surfaces, blend modes, and sometimes shaders. Light and shadow interactions significantly improve the mood and depth of a game.
Note: As GameMaker updates, new functionalities may improve or change the way lighting is handled. Always check the latest documentation.
Was this content helpful?
Other Common Game Engines Questions (and Answers)
- Can You Use C# in Unreal Engine?
- Is Unreal Engine Open Source?
- 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?
- Is Unreal Engine Good for Beginners?
- Does Unreal Engine Work on Mac?
Free System Design on AWS E-Book
Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.
Switch & save up to 80%
Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement. Instantly experience up to a 25X boost in performance and 80% reduction in cost