0

C ++のSDLでスクロールグラフィックスプログラムを作成するという概念について頭を悩ませています...たとえば、横スクロールゲームや、画面の解像度よりも大きいマップを使用したトップダウンゲームなどです。

基本的に、すべてのリソースを仮想サーフェスにブリットし、その一部だけを画面にブリットする必要があるという印象を受けましたが、これは機能していないようです。ここに私が使用しているコードの一部があります:

    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 でソースを宛先にブリットします。この例では、さまざまなタイルの位置を保持する SDL_Rects の配列があります。このコードは、マスター (実際の画面) に直接ブリットすると機能しますが、「フル」にブリットしてから、その一部をマスターにブリットすると、空の画面しか表示されません。ここで何が欠けていますか?

4

1 に答える 1

1

私が間違っていたことを見つけました。

「フル」サーフェスを作成したとき、それはヌルのままでした。コマンド SDL_CreateRGBSurface() を発見しました。

そのようです:

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

ヌル サーフェスにブリットできません。この機能は知りませんでした。知れば知るほど〜

于 2012-10-11T14:20:35.560 に答える