SDL一次绘制多个表面


10

我正在尝试编写一个平台游戏,其中将关卡背景的精灵分解为512x512块。我一次在内存中保留了3个块,我正在尝试编写代码以将这三个块都抹在屏幕上。这是我当前的代码:

SDL_Rect where;
where.y = -game->camera->y;

where.x = -game->camera->x - MAP_WIDTH;
SDL_BlitSurface(left_chunk, NULL, screen, &where);

where.x = -game->camera->x;
SDL_BlitSurface(center_chunk, NULL, screen, &where);

where.x = -game->camera->x + MAP_WIDTH;
SDL_BlitSurface(right_chunk, NULL, screen, &where);

我遇到的问题是,哪个块首先被弄污是唯一显示的块。其余的无法显示在屏幕上。我认为这个问题可能与alpha透明度有关,但是即使这些块根本不重叠,它们仍然无法消除。在代码的其他部分中,我一次将多个内容(例如字符和背景)拖到屏幕上,它们都可以正确显示。这部分代码是我遇到此问题的唯一区域。

屏幕截图

如果我注释掉了left_chunk的行,它将变为:

屏幕截图之后


您确定计算出的X值将图像放置在屏幕的可见区域中吗?
Zack The Human

@ZackTheHuman由于屏幕只有300x175,地图块是512x512,因此它们部分位于屏幕外。我本来以为可能是问题所在,但它们是否在屏幕上似乎与它是否正确渲染无关。我可以上传屏幕截图以帮助说明问题。
extropic-engine

1
SDL文档说SDL_BlitSurface会交联后将最终矩形保存为dstrect。您是否尝试过每次blit之后重置where变量?
Asakeron,2012年

@Asakeron就是这样!我没想到在哪里修改。您应该将您的评论作为答案!
extropic-engine

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.