window/virtual_resolution_basics¶
Goal¶
Understand what virtual resolution controls and how it differs from window size.
Why this tutorial exists¶
Most gameplay code should think in virtual coordinates, not physical window pixels. This tutorial makes that separation visible.
Source map¶
Settings profile:
examples/settings/window/virtual_resolution_basics.ymlExample builder:
examples/catalog/window/virtual_resolution_basics/main.pyScene:
examples/catalog/window/virtual_resolution_basics/scenes/scene.pyWindow adapter:
packages/mini-arcade-core/src/mini_arcade_core/runtime/window/window_adapter.pyViewport math:
packages/mini-arcade-core/src/mini_arcade_core/engine/render/viewport.py
Runtime flow¶
Engine starts with
engine_config.virtual_resolution.Scene can update it at runtime with:
services.window.set_virtual_resolution(width, height).Viewport state recomputes: scale, viewport rectangle, and offsets.
World rendering keeps using virtual-space coordinates.
What to verify¶
Use keys 1/2/3 to switch virtual resolution.
You should see:
runtime virtualchanges immediately.corner markers remain at virtual edges.
world layout meaning is stable, while scale/letterbox changes.
windowsize remains independent from virtual size.
Run¶
Default:
mini-arcade run --example window/virtual_resolution_basics
Force backend:
mini-arcade run --example window/virtual_resolution_basics --pass-through --backend pygame
mini-arcade run --example window/virtual_resolution_basics --pass-through --backend native
Override startup virtual resolution:
mini-arcade run --example window/virtual_resolution_basics --pass-through --virtual-width 960 --virtual-height 540
Controls¶
1-> virtual640x3602-> virtual800x6003-> virtual960x540F1-> debug overlayESC-> quit
Next step¶
Compare viewport policies: fit_vs_fill.md