gpt4 book ai didi

c++ - SDL - 滚动通过(屏幕外)表面

转载 作者:行者123 更新时间:2023-11-28 07:55:17 31 4
gpt4 key购买 nike

我很难理解在 C++ 中用 SDL 制作滚动图形程序的概念……例如,对于横向卷轴游戏,或者 map 分辨率大于屏幕。

基本上,我的印象是我需要将我所有的资源 blit 到一个虚拟表面,然后只将其中的一部分 blit 到屏幕,但这似乎不起作用。这是我正在使用的部分代码:

    void showMap(){
for(int y=0;y<MAP_Y;y++){
for(int x=0;x<MAP_X;x++){
switch(map[x][y]){
case 0:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[0][0]);
break;
case 1:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[1][0]);
break;
case 2:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[2][0]);
break;
case 3:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[3][0]);
break;
default:
apply_surface(x*STEP,y*STEP,tiles,full,&clips[4][4]);
break;

}
}
}
apply_surface(0,0,full,master,&vp_xy);
}

apply_surface 的原型(prototype)如下:

void apply_surface(int x, int y, SDL_Surface *source, SDL_Surface *dest, SDL_Rect* clip);

它使用指定的裁剪在给定的 x,y 处将 source 传输到 dest。在示例中,我有一个 SDL_Rects 数组,其中包含各种图 block 的位置。如果我直接 blit 到 master(实际屏幕),则此代码有效,但尝试 blit 到“完整”然后将其中的一部分 blit 到 master 只会让我看到一个空屏幕。我在这里缺少什么?

最佳答案

好吧好吧我做错了什么。

当我创建“完整”表面时,它仍然是空的。我刚刚发现命令 SDL_CreateRGBSurface()。

像这样:

full = SDL_CreateRGBSurface(SDL_SWSURFACE,STEP*MAP_X,STEP*MAP_Y,S_BPP,0,0,0,0);

不能 blit 到空表面。我不知道这个功能。知道的越多~

关于c++ - SDL - 滚动通过(屏幕外)表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12840799/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com