I am experimenting with creating a pixel-art mobile game in Godot. I am having trouble with the viewport size regarding the pixel art assets. I’ve learned that I should set the scaling mode to integer, which adds black bars to the screen. My plan to get rid of the black bars is as follows:
- Find a way to resize the main viewport dynamically in runtime
- Calculate, based on the device’s size, what size the viewport should be
- Apply that calculation when appropriate
Before I even try to get a calculation like that going, I want to make sure I can change the viewport’s size in the code, which I couldn’t figure out myself. I have tried the following:
- Changing the project settings in a
_ready
function: Does nothing - Changing the project settings in a
_process
function: Does nothing - Setting
get_viewport().size
in a_ready
function: Does nothing - Setting
get_viewport().size
in a_process
function: Changes the size of the viewport, but without expanding it - Setting
get_window().size
in a_ready
function: Does nothing
What else can I try?
And where should I put that? In a
_reaay
or a_process
?Thanks, setting
get_window().content_scale_size = DisplayServer.window_get_size() / 3
works! Now I only have to figure out what 3 stands forBy the way, you can set up and use a Global script that is accessible from any node (set it up from Project Settings -> Autoload tab), it can also contain a
_ready()
function that will run one time once the game is loadedOn a project of mine, I use this function to change between different window modes, maybe one of these could make your think work? Possibly setting the window to fullscreen would work as you intend.
func _on_windowtype_item_selected(index): match index: 0: #Windowed mode get_tree().root.mode = Window.MODE_WINDOWED get_window().size = get_viewport().size #Possibly what you were looking for all this time ## alternatively, get_window().size = DisplayServer.window_get_size() #should make the game window the same size as the whole screen get_tree().root.borderless = false 1: #Fullscreen mode get_tree().root.mode = Window.MODE_FULLSCREEN #easiest full screen 2: #Windowed Borderless mode get_tree().root.mode = Window.MODE_WINDOWED get_tree().root.borderless = true 3: #Fullscreen Borderless mode get_tree().root.mode = Window.MODE_MAXIMIZED get_tree().root.borderless = true
I haven’t developed for mobile, but I have played around with pixel art in games. Here’s a guide which probably outlines the why of it better than I can.
It sounds like to git rid of the black bars, you want to open ProjectSettings/Display/Window/Stretch and set Mode to Viewport and Aspect to Expand.
I did set the aspect to expand, but when I set the scaling mode to integer instead of fractional it adds the black bars