我正在尝试编写一个平台游戏,其中将关卡背景的精灵分解为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
SDL文档说SDL_BlitSurface会在交联后将最终矩形保存为dstrect。您是否尝试过每次blit之后重置where变量?
—
Asakeron,2012年
@Asakeron就是这样!我没想到在哪里修改。您应该将您的评论作为答案!
—
extropic-engine