1. Проще изменять координаты объекту Camera или Viewport. И уже на ходу, при рендеринге, вычислять
someObject.x - viewport.x
.
Ведь отображение объектов — малая часть игровой логики: объектам надо жить своей жизнью, взаимодействовать друг с другом и героем, заранее отсекаться, если они далеко от камеры.
А если — вдруг — будут несколько окошек, например, для игры вдвоём, можно сделать несколько viewport’ов.
2. Это лишь простейший алгоритм скроллинга (т.н. «привязанная камера»):
viewport.x = clamp(player.x - viewport.width / 2, 0, world.width - viewport.width);
clamp(x, y, z) = max(min(x, z), y); при y>z можно (но не обязательно) наладить своё хитрое поведение, взяв, например, (y+z) / 2.
Если игра динамичная, а окно обзора невелико, можно усложнить поведение камеры.
У меня есть на этот счёт прекрасный перевод.
https://habrahabr.ru/post/272933/
https://habrahabr.ru/post/273397/
P.S. Платформеры писал профессионально, правда, не на холсте HTML 5, а на Java ME.