Im having trouble figuring out the right settings to get my screen to scale/show the right way for different screen. Im designing for a 16:9 aspect ration (since that seems to the be the most common base aspect ratio) but my background image will have enough image for a 18:9 (newer androids are starting to use this). My problem is how do I set my project settings to get it to where the height stays the same, but for wider displays (18:9) it shows more of the background. My current settings just stretches the background and makes it wider. Here are my Project settings: Window->Width: 1920, Height: 1080 Window->Stretch Mode: 2d, Apect: Ignore (this is the best solution with no bars but stretches the width) Window->Test Width: 1080, Test Height: 540 (18:9 ratio for testing)

Here is a screenshot of my scene tree:

Right now its just a simple screen, the sprite has the background image with centered selected and positioned in the center of my screen view. I have it this way so if I can expand my viewport it will keep the image centered and just show more grass. Here is the screenshot of the scene so you can see the positioning:

Any help in settings, or I need to use a viewport/camera node to do this. I just cant seem to find an example that does what I need or get the settings right when I play with cameras

So literally right after posting this a finally found something that helped me figure something out. Ended up using some code to manually adjust the viewport on startup. Since I know the width is the dimension that is what i want to change what I did was get the screens aspect ratio and resolution and apply some adjustments to it, to scale it to the right resolution and then expand/shrink the width to fit. Heres the code:

onready var viewport = get_viewport()

var minimum_size = Vector2(1920, 1080)

func _ready():
    viewport.connect("size_changed", self, "window_resize")
    window_resize()

func window_resize():
	print("Size Changed")
	var current_size = OS.get_window_size()
	var scale = 1080/current_size.y
	var new_size = current_size*scale
	
	var current_ar = current_size.x/current_size.y
	var default_ar = 16.0/9.0
	
	if current_ar > default_ar:
		new_size = Vector2(current_size.y*current_ar*scale, current_size.y*scale)
	
	viewport.set_size_override(true, new_size)

There might be a better way, but this gets the effect I want. As far as my scenes go i had to put the nodes under a control node that is sized 0,0 and anchored to the center, so everything stays put in the center of the screen.