Я пытаюсь понять основы разработки игр на C64 после BASIC, и я мог бы воспользоваться некоторыми советами по поводу чего-то очень простого, но важного: что на самом деле представляет собой весь этот материал на экране и как его нарисовать?
Посмотрите на Катакиса / Денариса :
На экране есть как минимум 9 разных вещей:
- Панель Score, с разными шрифтами
- Сам корабль
- Спутник, прикрепленный к кораблю, съемный
- Снаряды вторичного оружия
- Основные оружейные снаряды
- Движущиеся объекты (могут быть вражеские корабли)
- Строка состояния с изображением корабля, количеством жизней и тремя разделами, которые можно заполнить
- Панель заряда основного оружия, может заполняться до конца
- Скроллинг звездного поля на заднем плане
- (не пронумерованы на экране) Твердые объекты, такие как камни или металлические стены, которые являются частью фона
C64 поддерживает только 8 спрайтов на горизонтальную линию сканирования, так что я не думаю, что все в середине экрана может быть спрайтом? Я предполагаю, что все, что требует коллизии, будет спрайтом (поскольку я могу получить аппаратное обнаружение коллизии со спрайтами), но даже тогда я быстро достиг предела в 8 спрайтов. Кроме того, мое оружие может стрелять более чем одним снарядом - мой корабль, спутник и 6 пуль уже будут иметь 8 спрайтов подряд (посмотрите примерно на 50 секунд видео).
Кроме того, какой графический режим будет использовать игра, подобная этой? В Руководстве по программированию перечислены режимы Bit Map Mode, которые существенно изменяют память экрана напрямую. В этом режиме я обычно должен работать? Как бы я соединил все не спрайтовые элементы вместе, чтобы вывести их на экран?
Большая часть материала в строке счета и состояния является статической («Площадь: 01» или «кадр»), поэтому я предполагаю, что я просто заполню их один раз, когда уровень начнется. Вещи, которые нуждаются в обновлении - счет, индикаторы заряда внизу - будут обновляться, заполняя экранную память черным цветом, а затем рисуя новый счет в каждом кадре?
Или мне нужно рисовать весь экран на каждом кадре?