我之前在SDL中发布了一个问题,抱怨我的函数总是返回null。我得到了一个问题的答案,肯定解决了一些事情,但不是一切。这是帖子:Tiling System C++ SDL
我将以下内容添加到我的map.cpp
文件中:
//Make a temporary map to draw the tiles to
Uint32 rmask, gmask, bmask, amask;
if ( SDL_BYTEORDER == SDL_BIG_ENDIAN ) {
rmask = 0xff000000;
gmask = 0x00ff0000;
bmask = 0x0000ff00;
amask = 0x000000ff;
}
else {
rmask = 0x000000ff;
gmask = 0x0000ff00;
bmask = 0x00ff0000;
amask = 0xff000000;
}
SDL_Surface* temp_map = SDL_CreateRGBSurface(SDL_SWSURFACE, MAP_WIDTH, MAP_HEIGHT, 32, rmask, gmask, bmask, amask);
虽然图像不再返回null,但我的功能仍然无法将图块打印到图像上。图像保持完全透明。
答案 0 :(得分:1)
您的代码应生成有效的test_map
,请参阅SDL_CreateRGBSurface
记录的here。
要记住的一件事是SDL_Rect
中的apply_surface
没有设置所有值。 SDL_Rect
没有默认构造函数将内存归零。您只需指定x
和y
,但不会指定w
和h
,这意味着您的w
和h
将包含垃圾。您应按this example中的建议将这些值初始化为源表面的w
和h
。