Зависит от модели.
Если ваша модель (данные) является сеткой, то столкновение происходит просто тогда, когда два несовместимых объекта занимают одно и то же место. Самый простой способ справиться с таким типом столкновения - просто убедиться, что место, куда вы пытаетесь переместить игровой объект, «доступно». Если это так, столкновения нет, и обновите модель . Если это было не бесплатно, то произошло столкновение.
Экран просто отображает модель. За исключением чего-то вроде обнаружения столкновений на пиксель (представьте себе оригинальные лемминги или черви), не используйте его для обнаружения столкновений .
Экран / представление - это просто агент рендеринга. Хотя модель может быть жестко привязана к экрану (например, вам нужно обновить только те части экрана, на которых что-то изменилось, например, когда часть перемещена), экран не является и не должен, как правило, считаться частью модели. Однако при современной скорости вычислений вы можете просто перерисовать всю видимую модель в каждом кадре.
(Да, я знаю, что повторил. Это было специально.)
Теперь, чтобы ответить на второй вопрос, не упомянутый в заголовке:
Когда вы начинаете рендеринг, просто нарисуйте ячейки screen_width / cell_width / 2 слева и ячейки screen_width / cell_width / 2 справа от проигрывателя (предполагается, что игрок занимает 1x1). Сделайте то же самое для взлета и падения. Убедитесь, что вы не вызвали исключение Index-Out-Of-Bounds. Вы можете запускать циклы for со значениями, выходящими за границы, при условии, что перед их использованием вы зажимаете / фильтруете. Если вы хотите, чтобы персонаж «проталкивал» край, когда он приближается, также отслеживайте текущую ссылку модель-на-просмотр.