Читаем Она позади тебя полностью

Подводя итог: вы можете писать все в задний экран в ОЗУ, а затем пытаться копировать на экран дисплея так быстро, как только возможно и вы получите прекрасный гладкий экран (при условии, что вы победите электронную пушку телевизора), но выполнение этого всего в два прохода съедает процессорное время и используемую память, что вы не можете себе позволить. Или вы можете писать непосредственно в память "скрестив пальцы", чтобы не получить глючный/мерцающий экран, но послушайте, это же быстро и тот кусок памяти, который вы собирались использовать под задний экран может быть использован для чего-то более важного, похожего на игровой код.

Я уточню последний абзац говоря, что для подавляющего большинства случаев задний экран — это идеальный способ реализации, подумайте о Pac-Man со статическим экраном и всего четырьмя спрайтами или игру, которая использует маскирующие спрайты, похожую на Rampage. В одном случае у вас много процессорного времени сделать то, что вы хотите, в другом это единственный способ получить желаемый эффект. В игре как R-Type, где экран постоянно прокручивается и содержит множество спрайтов, пуль и оружия, летающего по всему экрану практически безостановочно — это не тот случай, в котором есть выбор, здесь нет альтернативы, все должно напрямую писаться в главный экран, но даже используя этот метод, он работал слишком медленно. Я нацелился на 4/50-ых секунды на игровой кадр и, если бы я не смог придумать что-то радикальное, я был никогда не смог этого добиться.

Мне нужен был способ совместить гладкость заднего экрана со скоростью прямой записи в главный экран, чтобы радикально понизить время, необходимое на все и минимизировать мерцание экрана. Это потребовало немного проб и ошибок, но в конце концов я пришел к решению, которое делало все, что я хотел.

Сердцем всего были два блока ОЗУ длиной в 640 байт, которые по сути являются картой обнаружения столкновения для игры, а 640 байт потому, что если вы посмотрите на главный экран дисплея размером 256*160 пикселей (и я имею ввиду область только для игровой прокрутки, не Очки/Лазер/Счетчик кораблей, линии под ним) тогда у вас будет актуальное атрибутное или разрешение по знакоместам 32*20, для простоты я назову ее "Карта столкновений 1". Есть еще и задний экран величиной 6912 байт, дублирующий главный экран, полностью включающий область атрибутов цвета, даже большую на 1 Кб чем мне было нужно, делающий адресацию экрана намного проще и представляющий удобный черновик при необходимости что-нибудь нацарапать в памяти. В течение моего тестирования с фиктивными данными я пришел к трем идеям, которые казались очевидными:


1. Какой смысл был в прокрутке пустых символов?

2. Зачем было стирать спрайты персонажа, если в следующем кадре на его месте появлялся еще один такой же?

3. Если части двух спрайтов совмещаются в одних в тех же знакоместах, зачем тратить время на рисование того, что вы все равно не видите?


Перед стартом уровня плитки размером 4*4 символа, которые создают фон для одного укомплектованного экрана декодируются, а символы записываются в Карту Столкновений 1. Чтобы нарисовать укомплектованный экран, все, что мне нужно было сделать — это шагать по всей карте, побайтно за один раз, получать восемь байтов данных, которые соответствуют значению символа карты и записать их в корректную позицию на главный экран дисплея.

Дополнительно перед стартом уровня я просматриваю, какие спрайты нужно отобразить на самом первом кадре игры (обычно только корабль игрока, Сила, выхлоп от корабля и т. п.), получаю необходимые данные и записываю в 6912-байтный задний буфер, использую Карту Столкновений 2 помечаю значение конкретного спрайта, который заполнил определенную символьную позицию, игнорируя пустые символы.

Когда подходит время отобразить первый кадр уровня я, используя Карту Столкновения 2, ищу не нулевые значения и копирую 8 байт данных, которые соответствуют помеченному символу из заднего буфера ячейки так быстро, как только возможно.

На данном этапе состояние игрового кадра от предварительно к окончательному:

* Фоновая графика есть только на главном экране дисплея Спектрума и больше нигде;

* Карта Столкновений 1 хранит фон, составленный как набор байтов, соответствующих позиции знакомест на главном экране. Если это ноль, значит нет фона в этом знакоместе.

* Карта Столкновений 2 содержит все спрайты, составленные аналогично Карте 1, но вместо главного экрана дисплея она указывает на данные, существующие во втором экране.

* Задний экран содержит все спрайтовые данные, которые будут перенесены в следующем кадре игры.

Как только спрайтовые данные были скопированы в главный экран, тогда и запускается игра и (обычно) для каждого нового кадра происходит следующее:

Перейти на страницу:

Похожие книги

Об интеллекте
Об интеллекте

В книге "Об интеллекте" Джефф Хокинс представляет революционную теорию на стыке нейробиологии, психологии и кибернетики и описывающую систему "память-предсказание" как основу человеческого интеллекта. Автор отмечает, что все предшествующие попытки создания разумных машин провалились из-за фундаментальной ошибки разработчиков, стремившихся воссоздать человеческое поведение, но не учитывавших природу биологического разума. Джефф Хокинс предполагает, что идеи, сформулированные им в книге "Об интеллекте", лягут в основу создания истинного искусственного интеллекта - не копирующего, а превосходящего человеческий разум. Кроме этого книга содержит рассуждения о последствиях и возможностях создания разумных машин, взгляды автора на природу и отличительные особенности человеческого интеллекта.Книга рекомендуется всем, кого интересует устройство человеческого мозга и принципы его функционирования, а также тем, кто занимается проблемами разработки искусственного интеллекта.

Джефф Хокинс , Джеф Хокинс , Сандра Блейксли , Сандра Блэйксли

Зарубежная компьютерная, околокомпьютерная литература / Технические науки / Прочая компьютерная литература / Образование и наука / Книги по IT