You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SGDK开发问题:加载索尼克精灵后PAL0调色板未生效

SGDK精灵调色板不生效(黑白显示)问题解决

问题原因

SGDK的SPR_init()函数会自动将PAL0调色板重置为默认黑白调色板,你之前的代码在SPR_init()之后设置PAL0,操作被初始化逻辑覆盖,导致精灵无法加载自定义调色板。

修复方案

方案1:调整调色板设置顺序

将VDP_setPalette移到SPR_init()之前执行,避免被初始化操作覆盖:

#include <genesis.h>
#include "sprites.h"

Sprite* my_sprite_sonic;

int main()
{
    VDP_setBackgroundColor(40);
    VDP_setScreenWidth320();

    // 先设置PAL0调色板,再初始化精灵系统
    VDP_setPalette(PAL0, sprite_sonic.palette->data);
    SPR_init();
    
    my_sprite_sonic = SPR_addSprite(&sprite_sonic, 0, 0, TILE_ATTR(PAL0, TRUE, FALSE, FALSE));

    while(TRUE)
    {
        SPR_update();
        SYS_doVBlankProcess();
    }

    return 0;
}

方案2:使用SGDK精灵专用调色板接口

改用SPR_setPalette函数,这是SGDK为精灵调色板提供的专属接口,会自动适配精灵系统的状态:

#include <genesis.h>
#include "sprites.h"

Sprite* my_sprite_sonic;

int main()
{
    VDP_setBackgroundColor(40);
    VDP_setScreenWidth320();

    SPR_init();
    // 使用SPR专用接口设置调色板
    SPR_setPalette(sprite_sonic.palette);
    
    my_sprite_sonic = SPR_addSprite(&sprite_sonic, 0, 0, TILE_ATTR(PAL0, TRUE, FALSE, FALSE));

    while(TRUE)
    {
        SPR_update();
        SYS_doVBlankProcess();
    }

    return 0;
}

额外检查点

  • 确认你的资源文件(如.res)已正确编译,sprite_sonic.palette不为空指针。SGDK资源编译器会自动关联精灵与对应调色板,若资源未正确导入,调色板数据会无效。
  • 确保TILE_ATTR中指定的调色板索引(这里是PAL0)与你设置的调色板一致。

内容的提问来源于stack exchange,提问作者Fogonrog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:22:43