Don Leno писал(а):Прочитал про параллакс, решил поискать но не нашел ничего похожего на ВБ.
Неправильно. Надо было решить не поискать, а решить подумать.
И вообще, весь вопрос задан целиком неправильно. Правильно было спрашивать так:
Я пишу игру-арканоид. Всё происходит в двух измерениях, то есть игра двухмерная, но хочется создать иллюзию глубины пространства. Никакими готовыми движками я не пользуюсь, всё рисую вручную.
Или по твоему все должны догадываться, что вообще ты делаешь и какой набор технологий используешь?
Теперь перейдём к тому, что такое «камера»? Это не более, чем абстракция и условность, которую удобно использовать при размышлении и программировании с точки зрения высокого уровня. Высокого — в данном случае означает уровень, когда рассматриваются вопросы игровой логики; низким уровнем в таком случае считается уровень, отвечающий за отрисовку.
Если речь шла бы о трёхмерной игре, то там камера была бы совокупностью координат точки, где находится виртуальный зритель, вектора, определяющего направление взгляда. Если бы нас интересовала не изометрия, а перспективная проекция, то в эту совокупность информации входили бы также углы обзора (FoV).
Если речь идёт о двухмерной игре, то это просто пара координат (X,Y), которая как бы соответствует положению виртуального зрителя, в том смысле, что если какой-то объект игрового мира имеет те же координаты (X,Y) то он у пользователя отображится по центру экрана.
Так что с позиции отрисовки камера — это просто координаты, на которые нужны подвинуть всё остальное
при отрисовке перед отрисовкой.
И если кто-то говорит «камера двигается
влево», то это означает просто что кадр-за-кадром все отрисовываемые спрайты двигаются
вправо.
Раз ты хочешь получить вспевдо-глубины, значит тебе нужно при меремещении камеры на величину D, двигать разные слои не на D, а на на меньшую величину (сдвига), причём чем более «глубокий» слой, тем меньше он сдвигается.
Слой, который отождествляется бесконечно удалённые объекты, если такой есть (или если бы такой был) не должен передвигаться вообще. А слой, который лежит на той же глубине, что и воображаемая камера, должен перемещаться на D.
Тогда можно ввести некий коэффициент, пропорционально которому будет двигаться каждый слой. Для бесконечно далёкого слоя этот коэффициент будет равен 0, для абсолютно близкого — единице.
Дальше при отрисовке нужно вычислять смещение каждого слоя по форуме —k · CamPosition и рисовать.