C++ SDL瓷砖第2部分

C++ SDL瓷砖第2部分,c++,sdl,C++,Sdl,我之前在SDL中发布了一个问题,抱怨我的函数总是返回null。我找到了解决问题的答案,肯定解决了一些问题,但不是所有问题。以下是帖子: 我将以下内容添加到我的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 = 0x0

我之前在SDL中发布了一个问题,抱怨我的函数总是返回null。我找到了解决问题的答案,肯定解决了一些问题,但不是所有问题。以下是帖子:

我将以下内容添加到我的
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,但我的函数仍然根本不在图像上打印平铺。图像保持完全透明。

您的代码应生成有效的
测试地图
,请参阅
SDL\u CreateRGBSurface
documented


需要记住的一点是,
apply\u surface
中的
SDL\u Rect
没有设置其所有值
SDL_Rect
没有将内存归零的默认构造函数。您只分配
x
y
,而从不分配
w
h
,这意味着您的
w
h
将包含垃圾。您应该按照中的建议将这些值初始化为源曲面的
w
h

谢谢您的帮助,我自己已经找到了答案,但在接下来的几个小时内,它不会让我回答我自己的问题,那时我已经忘记了。谢谢你的建议!