Вопрос

Я пытаюсь альфа-смешивать спрайты и фоны с devkitPro (включая libnds, libarm и т.д.).

Кто-нибудь знает, как это сделать?

Это было полезно?

Решение

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

  • исходный слой (слои) должен находиться поверх целевых слоев, чтобы отображалось некоторое смешивание.это означает, что приоритет исходных слоев должен быть численно ниже, чем приоритет целевых слоев.
  • исходный слой - это то, что должно быть полупрозрачным, конечный (ые) - это то, что должно быть видно насквозь (и да, я нахожу это довольно запутанным).

Для спрайты, в частности, Затем у вас есть 3 способа добиться альфа-смешивания в зависимости от того, что вам нужно и сколько вы "готовы заплатить" за это.:

  • Вы можете сделать так, чтобы все спрайты имели некоторое альфа-смешивание, включив BLEND_SRC_SPRITE в REG_BLDCNT[_SUB] ...не настолько полезный.
  • Вы можете выборочно включить смешивание некоторых спрайтов, используя ATTR0_TYPE_BLENDED.Уровень наложения будет одинаковым для всех спрайтов (и слоев)
  • спрайты растрового типа используют прямые цвета (минуя палитры), поэтому ATTR2_PALETTE() поле спрайтов GBA бесполезно и было переработано в ATTR2_ALPHA.

Другие советы

Спрайты на DS могут быть альфа-смешаны с помощью регистры управления смешиванием.TONC предоставляет необходимую информацию для того, чтобы заставить смешивание работать на главном экране, поскольку расположение регистров одинаковое.Альфа-блендинг на подэкране использует один и тот же процесс с разными регистрами со смещением в 1000 часов.

Реестры, на которые вы будете смотреть, следующие REG_BLDMOD, REG_COLV, и REG_COLY для главного экрана и REG_BLDMOD_SUB, REG_COLV_SUB, и REG_COLY_SUB для дополнительного экрана.

Также помните, что вам придется измените графический режим спрайта чтобы включить смешивание для каждого спрайта.

Это было очень длинный прошло много времени с тех пор, как я занимался программированием на GBA, но, насколько я помню, DS поддерживает большую часть (если не все) того, что поддерживает GBA. Это по ссылке есть раздел о том, как выполнить альфа-смешивание для GBA (раздел 13.2).Я не знаю, есть ли специфичный для DS способ сделать это, но у вас это должно сработать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top