SDL平铺第2部分

时间:2013-02-17 08:36:01

标签: c++ sdl

我之前在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,但我的功能仍然无法将图块打印到图像上。图像保持完全透明。

1 个答案:

答案 0 :(得分:1)

您的代码应生成有效的test_map,请参阅SDL_CreateRGBSurface记录的here

要记住的一件事是SDL_Rect中的apply_surface没有设置所有值。 SDL_Rect没有默认构造函数将内存归零。您只需指定xy,但不会指定wh,这意味着您的wh将包含垃圾。您应按this example中的建议将这些值初始化为源表面的wh