Не требует. Вряд ли единицы мегабайт RAM можно считать большим аппаратным ресурсом.
Как раз наоборот, трудозатраты минимальны, графика и процедуры остаются родными.
Что значит худшего качества? Картинка, в рамках поставленной задачи, может быть одна - как в Спектруме, только без клэшинга.
Польза от расширений, софт для которых будет написан "потом" - имхо, сомнительна.
Ну уже упоминавшийся RamboIII, да остальные игрухи от Andrew Deakin - Athena, RenegadeIII, Adams Family etc. тоже сделаны на этом принципе. Да и все, что имеет статический фон, тоже выгодно делать таким образом. Экономия памяти и процессора. Памяти под буфер нужно не на весь экран, а только по размеру спрайта. А разворачивать фон из тайл-мапа, даже по размеру объекта - процессор просто не успевает.
Это что получается, надо взять фон, перенести его в буфер, нарисовать сверху спрайт и то, что получилось перенести в экран? Но зачем эти лишние движения, если фон уже на экране, а все, что надо это сохранить кусочек фона в буфере и нарисовать спрайт?
Вы упорно не замечаете простой вопрос: "как стереть спрайт не перерисовывая всё?" Если вы будете спрашивать, "Зачем это нужно?" - стразу ответ: существующие игры так делают.
Вот смотрите есть процедура вывода курсора мыши. Она работает до смешного просто. В буфер запоминается фон из того места экрана, где будет выводиться спрайт стрелочки. Затем рисуется стрелочка, с наложением на фон. В следующем цикле из буфера в экран возвращается сохраненное изображение, стирая курсор мыши, и цикл рисования повторяется в другом месте.
Теперь у нас есть экранные слои. Что надо поменять в данном алгоритме? Всего две вещи. Перед процедурой устанавливаем активным слой 1. Дальше, таже самая процедура читает нули из экрана (потому, что стандартное изображение находится в 0м слое, а в 1м слое кроме изображения курсора мыши у нас никогда ничего не бывает) , как и раньше, сохраняет эти нули, думая, что это фон, в тот же самый буфер, и рисует спрайт стрелки, точно так же, как и раньше, даже не подозревая, что он попадет не на фоновое изображение, а в пустой слой №1. Всё, устанавливаем активным 0й слой и возвращаемся в основную программу. Спрайт стрелки будет виден над основным изображением, без всякого клэшинга. Теперь, чтобы спрятать курсор мыши, устанавливаем активным 1й слой и вызываем старую процедуру стирания. Она как и раньше перенесет в экран из буфера нули, думая, что это сохраненный фон, тем самым сотрет изображение стрелки. Делаем активным слой 0, возвращаем управление основному коду.
Как видите, все изменения - только в переключении слоев до и после отрисовки. Все остальное остается неизменным.
Хотелось теперь услышать от вас, как вы собираетесь адаптировать этот же алгоритм мышиного курсора под свою систему.
- - - Добавлено - - -
Точно. Слой - это обычный спектрумовский экран с прозрачным PAPER. Таких экранов несколько, они находятся друг над дружкой, поэтому для них предпочтительнее термин "слой". Нижние "просвечивают" через прозрачный PAPER верхних. Текущий доступный для процессора экран(слой) переключается значением в порт. Переключение в стандартной области $4000-5AFF. Переключение на отображение не влияет никак, только на доступный для чтения/записи экран(слой). Самый нижний, нулевой слой - стандартный экран (т.е. с непрозрачным PAPER и с FLASH) Вот такая упрощенная схема.
Нет количество байт для программы не меняется. То, что рисовалось на одном стандартном экране, теперь разносится по слоям, но общий объем выводимой графики не меняется (за исключением мелких нюансов).
- - - Добавлено - - -
Задача не в том, чтобы нарисовать 16 цветную картинку. Согласен, для этого 16 слоев не самый лучший способ.
Задача - устранить клэшинг в существующих программах с минимальными усилиями и без перерисовки графики.
Почему так часто упоминаются спрайты? Так, если фон еще как-то можно распределить с учетом знакомест, то со спрайтами дело совсем плохо. Поэтому основной упор в деле борьбы с клэшингом и делается на спрайты.





Ответить с цитированием