Hi,
I’m building a mobile app (portrait, 1080×1920, stretch mode canvas_items / expand) where mini-games are scenes loaded dynamically into a slot. The main layout looks like this:
VBoxContainer
├── Header (Control) ← fixed height
├── ContentSlot (Control, SIZE_EXPAND_FILL) ← mini-games load here
└── Footer (Control) ← fixed height
ContentSlot fills all remaining vertical space, so its height depends entirely on the device screen. At my test resolution (540×960) it’s roughly 500×400 px, but on a real device it will be different every time.
Mini-games are independent scenes instantiated and added to ContentSlot via add_child(). There are two types:
-
Control-based (UI games: quizzes etc.) anchors handle the resize naturally, no problem here
-
Node2D-based (action games) , this is where I’m unsure
For the Node2D mini-games, the issue is both at design time and at runtime.
At design time: when I open a Node2D scene in the Godot editor, I have no reference frame. The editor viewport is arbitrarily large, so I don’t know what space I’m actually designing for. There’s no equivalent to Control anchors for Node2D, a sprite placed at position (200, 150) will just be at (200, 150) regardless of what the actual available area will be at runtime.
At runtime: when the Node2D scene is added as a child of ContentSlot, it renders starting from ContentSlot’s canvas position. The Node2D has no built-in way to know the bounds of its parent Control, and nothing automatically constrains or adapts its content to fit.
For Control-based mini-games the answer is obvious, anchors do all the work and the scene adapts naturally. But I genuinely don’t know what the idiomatic Godot approach is for Node2D content in this situation.
Is this a case where you just accept that Node2D games need a different authoring strategy? Do you typically wrap them in something? Or do you design Node2D games differently from the ground up to be resolution-agnostic?
Any insight appreciated !


