На экране просто рисуются все объекты, которые попадают на экран (а не находятся за его пределами). У каждого объекта есть координаты, поэтому программно легко проверить, попадает ли объект на экран или находится за границей экрана.
Обычно в играх принята такая схема, что все объекты рисуются заново каждый тик. А тиков в секунду может быть очень много (это то, что называется FPS - frames per second). Так что если что-то меняется в игровом мире, то сразу же меняется и картинка визуально.
Кнопки перемещения же просто меняют координаты. Они напрямую не связаны с отображением. Но косвенно они приводят к эффекту, что объект (главный персонаж) как бы движется. Только координаты меняются не плавно, а дискретно - каждый кадр новые координаты. Просто глазу незаметны "прыжки" на 1-2 пикселя и он округляет это и считает непрерывным движением.
Получается, что один программный код отвечает за изменение координат, в зависимости от нажатия клавиш. А другой программный код считывает эти координаты, чтобы нарисовать кадр. Общее у них - лишь область памяти с координатами, но один пишет в неё, а другой - читает. В остальном их не нужно смешивать, и стоит рассматривать и кодить отдельно друг от друга.