window/screen_to_virtual_input¶
Goal¶
Map raw screen-space input into virtual coordinates reliably across viewport modes and resize changes.
Why this tutorial exists¶
Gameplay logic runs in virtual coordinates. Mouse/touch input arrives in screen coordinates. This mapping must be correct or aiming/clicking drifts.
Source map¶
Settings profile:
examples/settings/window/screen_to_virtual_input.ymlExample builder:
examples/catalog/window/screen_to_virtual_input/main.pyScene:
examples/catalog/window/screen_to_virtual_input/scenes/scene.pyInput adapter:
packages/mini-arcade-core/src/mini_arcade_core/runtime/input/input_adapter.pyWindow adapter mapping:
packages/mini-arcade-core/src/mini_arcade_core/runtime/window/window_adapter.pyViewport mapping math:
packages/mini-arcade-core/src/mini_arcade_core/engine/render/viewport.py
Runtime flow¶
Backend emits mouse motion events in screen coordinates.
InputAdapterstoresmouse_posinInputFrame.Scene calls:
services.window.screen_to_virtual(screen_x, screen_y).Window adapter applies logical->drawable scaling and viewport transform inverse.
Scene uses mapped coordinates in world-space rendering.
What to verify¶
move mouse and compare
screen mousevsvirtual mouse.switch
FIT/FILLwith1/2; virtual mapping changes accordingly.in
FIT, moving inside letterbox bars can yield out-of-bounds virtual values.virtual trail follows mapped world coordinates, not screen coordinates.
Run¶
mini-arcade run --example window/screen_to_virtual_input
mini-arcade run --example window/screen_to_virtual_input --pass-through --backend native
Controls¶
Move mouse -> updates mapping
1->FIT2->FILLC-> clear virtual trailF1-> debug overlayESC-> quit