1

每个像素由两位组成,最多允许 4 种灰度。从pandocs 的 LCD Monochrome Palettes 部分,我们可以开发获取颜色的算法(在我理解正确的情况下):

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是透明而不是白色?为什么调色板定义会发生变化,而不是用于从调色板中获取颜色的颜色编号?

4

1 回答 1

2

你是什​​么意思“他们两个是相同的”?你有三个不同的调色板。背景和窗口之一。两个用于精灵,您可以使用精灵属性中的特殊位为每个精灵单独选择。为什么要更改调色板而不是颜色编号?更改调色板或精灵属性比重写精灵或窗口的每个图块以在屏幕上获得一些效果要便宜得多。当 Gameboy 在屏幕上绘制图像时,您甚至可以实时更改调色板。

例如,假设我想实现整个背景在正常颜色和白色或黑色之间闪烁的闪烁效果。无需重写每一帧上的每个背景图块,我只需更改调色板并准确计时以仅影响我需要的部分屏幕。甚至还有一篇文章描述了类似的技术。

于 2019-06-29T18:35:53.170 回答