Заинтересовала тема, решил подумать, как же можно малой кровью убрать клэшинг. Идея такая - экран состоит из нескольких экранных плоскостей (2,4,8 штук), которые находятся над друг над другом. Самая нижняя плоскость - обычный спектрумовский экран, на нем рисуется фон. Каждая следующая плоскость предназначена для рисования спрайтов. Это тоже обычный спековский экран, но с одним отличием. Если его точка имеет цвет INK, то она отображается цветом из атрибутов этой плоскости. Если же она имеет цвет PAPER, то она считается прозрачной, и сквозь нее "просвечивают" нижележащие слои. Вот, в принципе, и всё. Для управления всем этим хозяйством нужен один-едиственный порт, в котором задается номер плоскости, которая маппится в адресное пространство экрана ($4000-$5aff).

Как это все работает - очень просто. Рисуем фон на самой нижней плоскости, переключаемся на плоскости повыше, рисуем спрайты. Если модифицируем готовую игру, достаточно найти процедуру вывода спрайта, и вставить перед ней OUT (c),<номер плоскости>, а после нее вернуть плоскость 0.

Двух плоскостей уже достаточно, чтобы убрать клэшинг атрибутов фона и спрайтов. Четырех хватит, чтобы сделать независимыми фон, врагов, снаряды и героя. Восемь плоскостей позволят решить вообще все проблемы клэшинга.

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

Нажмите на изображение для увеличения. 

Название:	ramboIII.png 
Просмотров:	861 
Размер:	10.0 Кб 
ID:	57858Нажмите на изображение для увеличения. 

Название:	tracer.png 
Просмотров:	918 
Размер:	11.7 Кб 
ID:	57859