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
相关产品推荐
相关产品推荐

