SDL - 滚动(屏幕外)曲面

时间:2012-10-11 13:35:22

标签: c++ scroll sdl tiling

我很难理解用c ++在SDL中制作滚动图形程序的概念...例如,对于一个侧面滚动游戏,或者一个自上而下的游戏,其地图大于分辨率屏幕。

基本上,我的印象是我需要将所有资源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的原型如下:

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

它使用指定的剪辑在给定的x,y处将目标bl压缩到dest。在这个例子中,我有一个SDL_Rects数组,用于保存各种tile的位置。如果我直接对主人(实际屏幕)进行blit,但是尝试将blit设置为'full',然后将其中的一部分blit to master,则只有空屏幕才能使用此代码。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

好的我知道我做错了什么。

当我创建“完整”曲面时,它仍为空。我刚刚发现了命令SDL_CreateRGBSurface()。

像这样:

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

不能blit到null表面。我不知道这个功能。你知道的越多〜