Какой смысл для GameBoy иметь несколько цветовых палитр?

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

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 прозрачна, а не белая? Почему изменяется определение палитры вместо номера цвета, используемого для получения цвета из палитры?


person Julen    schedule 29.06.2019    source источник


Ответы (1)


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

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

person creker    schedule 29.06.2019