OK.В сущности, я пытаюсь сделать свою собственную интерпретацию оборудования NES, чтобы я мог создать игру, которая в идеале напоминала бы игру NES.В настоящее время я зациклен на том, как настроить рисование игрового поля в видеопамять (обратный буфер).
BACKBUFFER
У NES были ограничения на именуемую таблицу,или backbuffer.Для моего примера, размер буферного буфера составляет 256x240 пикселей, или размер одного экрана.Если бы я нарисовал это на телевизоре, он бы полностью заполнил экран.Теперь, если бы я нарисовал это на экране со смещением X = 5, все изображение было бы смещено и обернулось бы вокруг экрана.
Например .....
ORIGINAL, NO OFFSET: DRAWN WITH OFFSET OF X=5:
ABCDEFGHIJK GHIJKABCDEF
DRAWN WITH OFFSET OF X=-5:
FGHIJKABCDE
Экран разделен на квадраты 8x8 пикселей каждый, всего 32x30 строк и столбцов.(256х240 пикселей).Смещение представляется в пикселях, а не в столбцах;поэтому теоретически я мог бы сместить экран на 5 пикселей, и каждый столбец сместился бы вправо на пять пикселей.
ДИЗАЙН УРОВНЯ
Мои этапы составленыэкранов, содержащих данные, представленные в виде строк и столбцов размером 16x15, каждый размером 16x16 пикселей.Это делается для того, чтобы эмулировать, сколько игр уровня NES хранит данные об уровне - каждая плитка содержит информацию о том, что должно быть в каждом блоке 8x8.
Например:
AA
BC with A,B,C,D representing what 8x8 graphic should go where
Этому также соответствует дизайн уровней.с каждым числом, являющимся отдельным экраном и - ничего не значащим, ноль.
-----
-123-
---4-
--54-
-----
РАЗМЕЩЕНИЕ ХАРАКТЕРОВ Это просто.Я уже знаю, как определить, к какой таблице, строке и столбцу относятся мои символы, основываясь на их абсолютном расположении.Я также могу определить относительное расположение на экране.
С помощью этой информации я могу легко определить, какие столбцы находятся слева и справа от символа, если таковые имеются (если символ находится слева отэкран 1, уровня больше не осталось)
ТАК ЗДЕСЬ ВОПРОС ДУН ДУН ДУН Как я рисую свои уровни на экране, чтобы они прокручивались от одного к другому.Было бы относительно легко рисовать один полный экран за раз, и когда персонаж подходит к краю, просто переворачивайте на другой экран.
Тем не менее, проблема, с которой я концептуально сталкиваюсь, заключается в том, что мне нужно «стримить»данные уровня на экране.Допустим, персонаж перемещается на 24 пикселя вправо.BG также должен двигаться.
Итак, мне нужно настроить прокрутку буфера в 24 пикселя.Однако простая прокрутка заставит экран перевернуться, обозначив старую часть уровня.Итак, при прокрутке я должен убедиться, что рисуем новые фрагменты уровня в задний буфер.Но прежде чем я смогу это сделать, мне нужно выяснить, какие плитки нужно рисовать в первую очередь.И если человек идет на 24 пикселя влево, мне нужно перерисовать плитки в буферном буфере и соответствующим образом изменить смещение.
И давайте не будем забывать, что если персонаж перемещается вправо и больше нет данных уровня длярисовать не должно быть смещения, но вместо этого персонаж становится ближе к краю экрана (вместо того, чтобы быть в центре экрана по оси X).
В принципе, у меня просто многоразных чисел и значений, которые застряли у меня в голове прямо сейчас - пытаясь обернуть мою голову вокруг многих понятий, и они заставили мой мозг превратиться в слизь.Кто-нибудь имеет какие-либо перспективы, как я могу подойти к этому?
РЕДАКТИРОВАТЬ: Использование VB.Net.C # также применим (я программирую на обоих)