C++ SDL:瓷砖集和分层曲面的组合不起作用

C++ SDL:瓷砖集和分层曲面的组合不起作用,c++,sdl,C++,Sdl,我想创建一个模块化设计的游戏使用SDL,但我无法得到我的精灵显示。确切地说,我正在尝试实现平铺集,它是在一个PNG文件中收集的一堆大小相等的精灵(在我的例子中) 我的数据结构应该包含平铺集中可用的精灵数组,然后可以使用draw(平铺*,位置,层)等方法绘制精灵数组 如前所述,我想在后面实现多个独立的背景层和前景层。类似地,我有一个层数组,这些层以预定义的顺序显示在我的屏幕表面(使用SDL\u SetVideoMode创建) 然而,我不明白我的代码中出了什么问题。 加载平铺集时,我可以成功地将当前

我想创建一个模块化设计的游戏使用SDL,但我无法得到我的精灵显示。确切地说,我正在尝试实现平铺集,它是在一个PNG文件中收集的一堆大小相等的精灵(在我的例子中)

我的数据结构应该包含平铺集中可用的精灵数组,然后可以使用
draw(平铺*,位置,层)等方法绘制精灵数组

如前所述,我想在后面实现多个独立的背景层和前景层。类似地,我有一个层数组,这些层以预定义的顺序显示在我的
屏幕
表面(使用
SDL\u SetVideoMode
创建)

然而,我不明白我的代码中出了什么问题。 加载平铺集时,我可以成功地将当前加载的平铺blit到层表面,如以下代码段所示:

this->graphic = SDL_CreateRGBSurface(SDL_HWSURFACE | SDL_SRCALPHA,
    tile_widths, tile_heights, bit_depth,
    rmask, gmask, bmask, amask);

SDL_BlitSurface(tileset_graphic, &tile_position, this->graphic, nullptr);
SDL_BlitSurface(tileset_graphic, &tile_position, 
    ((VideoController::get_instance())->layers)[0], &tile_position);
在第一行中,我尝试将
tileset_图形
中与精灵对应的部分blit到
SDL_曲面*
,该曲面由我的
Tile
结构持有,稍后使用

但是,我不能使用此曲面在图层上进行blit。 第二个(test)语句只是将
tileset\u图形的考虑区域复制到我的图层的最底部。此外,我在
main
方法中执行了几个测试命令

我在测试期间的发现:

  • I可以将一个
    tileset_图形
    块粘贴到一个图层上,并正确显示(见上文)
  • I可以
    平铺
    直接显示在屏幕上:

    SDL_BlitSurface(
      tile->graphic,
      nullptr,
      (VideoController::the_instance)->screen,
      &relative_position);
    
  • 但是,我无法将
    平铺
    粘贴到层上:

    SDL_BlitSurface(
      tile->graphic,
      nullptr,
      (VideoController::the_instance)->layers[0],
      &relative_position);
    
更准确地说,当我将整个
平铺设置为图形进行测试,然后将
平铺
放置到由于该测试而已占用的区域上时,我可以部分看到我的精灵。但话说回来,我完全不知道为什么会这样

摘要:

我尝试将几个
SDL_曲面
s拼接到另一个曲面上,但似乎仅通过尝试此(所需)曲面链失败:

graphic --> layer --> screen
有没有人知道哪里出了问题,或者能告诉我你们需要哪些额外的信息

编辑


我能够在初始化的(
SDL_CreateRGBSurface
)上找到该blitting,但仍然“未接触”的层表面似乎以某种方式失败。当我在图层表面上使用
SDL\u FillRect
时,在将平铺分块到图层上之前,它会正确显示。然而,我正在以这种方式失去图层的透明度…

我找到了解决方案

我必须通过执行以下操作来明确重置我的
图形的
SDL\u SRCALPHA
标志

SDL_SetAlpha(this->graphic, 0, SDL_ALPHA_OPAQUE );