МАСКИ
Что касается масок, то тут
трудно было бы озаглавить эту
статью "Такие РАЗНЫЕ маски",
поскольку на фронте масок все
спокойно и стандартизировано.
Для начала давайте разберем-
ся в том, что же такое маска.
Посмотрите на спрайт из игры 3D
BATMAN; Вы можете заметить, что
перед образом самого человечка
находится некоторый рисунок, на
котором вместо человечка изобра-
жен его силуэт. Зачем он нужен?
Все очень просто - при печати
спрайта на экран прямым копиро-
ванием (LD A,(данные); LD (эк-
ран),A или по-другому) мы унич-
тожаем фон, который находился за
спрайтом, в результате чего вок-
руг спрайта образуются уродли-
вые пустоты, что портит общее
впечатление от игры. Вот здесь-
то и выходит на первый план мас-
ка. Центральный процессор имеет
в своем арсенале такую логичес-
кую команду, как AND. Что проис-
ходит с экраном, если маску на-
ложить на экран при помощи этой
команды:
байт экрана 11111111
байт маски 11100111
--------
результат 11100111
Как видите, на экране появи-
лось пространство с выключенны-
ми пикселями. Кто-то уже, навер-
ное, догадался: действительно,
если наложить на экран маску
перед тем, как печатать сам
спрайт, на экране получится пус-
тое место - размером со спрайт.
Если теперь напечатать на экран
спрайт не прямым копированием, а
объединить экран и спрайт по OR,
то спрайт впишется в очищенное
маской окно, и фон, который на-
ходится рядом со спрайтом, не
будет испорчен.
Как создать маску. После то-
го, как ваш спрайт готов, ему
надобно создать маску, а сде-
лать это очень просто. Создание
маски можно разбить на 3 этапа:
Сначала мы инвертируем нари-
сованный спрайт (выключаем вклю-
ченные биты и включаем выключен-
ные), второй этап - стираем все
внутри силуэта, и, наконец, тре-
тий этап - мы расширяем внутрен-
нее пространство маски на 1 пик-
сель. Это нужно для того, чтобы
спрайт при печати не сливался с
фоном, а отделялся от него поло-
ской толщиной в один пиксель.
Ну вот, о маске вроде бы все.
Скажу лишь, что в памяти маску
хранят в том же виде, в ка-
ком хранится соответствующий ей
спрайт.