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