如何使用Raylib正确加载透明图片?Flappy Bird开发求助
解决Raylib中Flappy Bird玩家纹理背景不透明问题
问题原因分析
你当前的代码错误地通过修改DrawTexture的颜色参数来实现背景透明——这个参数的作用是给整个纹理叠加颜色并调整整体透明度,而非识别图片本身的alpha通道。另外,棋盘格图案是Raylib用来标记纹理透明区域的默认显示,说明纹理的alpha通道未被正确识别或应用。
修复步骤
- 移除自定义的
transparent颜色:直接使用WHITE作为DrawTexture的颜色参数,这样纹理本身的alpha通道会正常生效。 - 无需手动设置混合模式:
BLEND_ALPHA是Raylib的默认混合模式,除非之前主动修改过,否则不需要额外调用SetBlendMode。 - 补充资源清理:添加纹理卸载和窗口关闭的代码,避免内存泄漏。
修复后的代码
#include<iostream> #include "raylib.h" int main(){ InitWindow(608,457,"Flappy Bird"); Texture2D background = LoadTexture("bg.png"); Texture2D player = LoadTexture("player.png"); while(!WindowShouldClose()){ ClearBackground(RAYWHITE); BeginDrawing(); DrawTexture(background,0,0,WHITE); // 使用WHITE保留纹理原生透明通道 DrawTexture(player,0,10,WHITE); EndDrawing(); } // 清理资源 UnloadTexture(background); UnloadTexture(player); CloseWindow(); return 0; }
额外检查项
- 确认
player.png是RGBA格式,背景像素的alpha值设为0(完全透明)。 - 使用专业图像工具(如Photoshop、GIMP)保存图片时,务必勾选“保留透明通道”选项。
- 运行前清理项目目录下的旧纹理缓存文件,避免加载残留数据。
内容的提问来源于stack exchange,提问作者nm_9
相关产品推荐
相关产品推荐

