Hugo Locurcio 196df0c78b Add integer scaling to Multiple resolutions demo (#985) | 9 months ago | |
---|---|---|
.. | ||
screenshots | 2 years ago | |
README.md | 1 year ago | |
icon.webp | 1 year ago | |
icon.webp.import | 1 year ago | |
main.gd | 9 months ago | |
main.tscn | 9 months ago | |
pixel_art_checkerboard_example.webp | 9 months ago | |
pixel_art_checkerboard_example.webp.import | 9 months ago | |
pixel_art_example.webp | 9 months ago | |
pixel_art_example.webp.import | 9 months ago | |
pixel_art_text_example.webp | 9 months ago | |
pixel_art_text_example.webp.import | 9 months ago | |
project.godot | 9 months ago |
Note: This demo is intended to showcase what Godot can do in terms of supporting multiple resolutions and aspect ratios. As such, this demo very full-featured but it's also fairly complex to understand.
If you're in a hurry and want to implement decent support for multiple resolutions and aspect ratios in your game, see Multiple resolutions crash course.
This project demonstrates how to set up a project to handle screens of multiple resolutions and aspect ratios.
This demo allows you to adjust the window's base resolution, stretch mode, stretch aspect, and scale factor (internally known as "stretch shrink"). This lets you see what happens when adjusting those properties. Make sure to resize the project window in any direction to see the difference with the various stretch mode and stretch aspect settings.
The GUI can be made to fit the window or constrained to a specific aspect ratio from a list of common aspect ratios. On ultrawide aspect ratios, this can be used to prevent HUD elements from being too spread apart, which can harm the gameplay experience. For non-essential HUD elements, specific controls can be made to ignore this aspect ratio constraint when it makes sense (e.g. a list of players on the side of the screen).
Additionally, a GUI margin setting is provided to better handle TVs with an overscan area to prevent GUI elements from being cut off. This can also improve the gameplay experience on large monitors by bringing HUD elements closer to the center of the screen.
A DynamicFont with multichannel signed distance field (MSDF) rendering is also used. This allows for crisp font rendering at any resolution, without having to re-rasterize the font when the font size changes. This makes changing the various settings in this demo faster, especially when large font sizes are used as a result of the GUI scale factor setting being increased.
Note that by default, Godot uses font oversampling for traditional rasterized DynamicFonts. This means MSDF fonts are not required to have crisp fonts at higher-than-default screen resolutions.
Language: GDScript
Renderer: Compatibility
The demo works with the following project settings:
canvas_items
stretch mode (this was called 2d
in Godot 3.x).
Recommended for most non-pixel art games.expand
stretch aspect (allows support for multiple aspect ratios without
distortion or black bars).648×648
in this demo).
This prevents GUI elements from automatically shrinking, even in portrait
mode.
1152×648
in this demo).
This way, the project starts in a 16:9 window even if the base window size has
a 1:1 aspect ratio.
Not everything in this demo is critical to all games. For gamejam projects or mobile games, most of this can be skipped. See the Common use case scenarios section in the Multiple resolutions documentation.
With the simpler setup described in the above documentation, there are a few limitations compared to this demo:
If you're releasing a full-fledged game on a desktop platform such as Steam, consider implementing full support as this demo suggests. Your players will thank you :slightly_smiling_face: