Какой смысл для GameBoy иметь несколько цветовых палитр? - PullRequest
1 голос
/ 29 июня 2019

Каждый пиксель состоит из двух битов, допускающих до 4 оттенков серого. Из раздела Монохромные ЖК-палитры pandocs мы можем разработать алгоритм получения цвета (в случае, если я его правильно понял):

COLOR_NUMBER_PALETTE_BITS = {
    0: (1, 0),
    1: (3, 2),
    2: (5, 4),
    3: (7, 6)
}
COLORS = {0: WHITE, 1: LIGHT_GRAY, 2: DARK_GRAY, 3: BLACK}


def get_pixel_color(palette_address, color_number):
    palette = read_memory(palette_address)
    high_bit, low_bit = COLOR_NUMBER_PALETTE_BITS[color_number]

    color_high_bit = get_bit(palette, high_bit)
    color_low_bit = get_bit(palette, low_bit)

    color = (color_high_bit << 1) | color_low_bit

    return COLORS[color]

Но просто взглянув на сигнатуру функции, мы можем сделать вывод, что одни и те же номера цветов могут привести к различным цветам; это зависит от используемой нами палитры.

У меня вопрос: зачем нам несколько цветовых палитр, когда две из них идентичны, и единственное отличие от третьей состоит в том, что 0 прозрачен вместо белого? Почему меняется определение палитры вместо номера цвета, используемого для получения цвета из палитры?

1 Ответ

1 голос
/ 29 июня 2019

Что вы имеете в виду "два из них идентичны"?У вас есть три разные цветовые палитры.Один для фона и окна.Два для спрайтов, которые вы можете выбрать для каждого спрайта индивидуально, используя специальный бит в атрибутах спрайта.Зачем менять палитру вместо цветовых цифр?Гораздо дешевле изменить цветовую палитру или атрибуты спрайта, чем переписывать каждую плитку спрайта или окна, чтобы добиться какого-либо эффекта на экране.Вы даже можете менять палитры в реальном времени, так как Gameboy рисует изображение на экране.

Например, допустим, я хотел реализовать эффект мигания, когда весь фон мигает между обычными цветами и белым или черным.Вместо того, чтобы переписывать каждую фоновую плитку в каждом кадре, я мог просто изменить палитру и точно рассчитать время, чтобы оно затрагивало только те части экрана, которые мне нужны.Есть даже статья , описывающая подобную технику.

...