1

次のコードSDL_Surface *を使用して、内の小さな四角形をカバーしようとしています:SDL_FillRect()

        int display(SDL_Surface * screen, Uint16 tile_size){
            if (!screen)
                return 1;
            std::cout << x << " " << y << std::endl;
            SDL_Rect pos = {(Sint16) (x * tile_size), (Sint16) ((y - 2) * tile_size), tile_size, tile_size};
            std::cout << pos.x << " " << pos.y << std::endl;
            for(uint8_t Y = 0; Y < 4; Y++){
                pos.x = x * tile_size;
                for(uint8_t X = 0; X < 4; X++){
//                    bit mask check to see which bits should be displayed. 
//                    not relevant to question
//                    if (shape[orientation][Y] & (1U << (3 - X))){
                        std::cout << pos.x << " " << pos.y << " -> ";
                        SDL_FillRect(screen, &pos, color);
                        std::cout << pos.x << " " << pos.y << std::endl;
//                    }
                    pos.x += tile_size;
                }
                pos.y += tile_size;
            }
            std::cout << std::endl << std::endl;
            return 0;
        }

x の範囲は 0 ~ 9、y の範囲は 0 ~ 21、tile_size は小さい (現在は 25)。

このコードを実行すると、出力は次のようになります。

3 0                             // x y
75 -50                          // x*tile_size y*tile_size
75 -50 -> 75 0                  // what in the world?
100 0 -> 100 0
125 0 -> 125 0
150 0 -> 150 0
75 25 -> 75 25
100 25 -> 100 25
125 25 -> 125 25
150 25 -> 150 25
75 50 -> 75 50
100 50 -> 100 50
125 50 -> 125 50
150 50 -> 150 50
75 75 -> 75 75
100 75 -> 100 75
125 75 -> 125 75
150 75 -> 150 75

3 行目 (最初に表示された四角形) は、何らかの理由で -50 から 0 に移動されています。これは、私の表示計算から外れています。なにが問題ですか?明らかな何かが欠けていますか?

4

1 に答える 1

3

ドキュメントを調べていたときにこれを見ました:「宛先にクリップ長方形が設定されている場合(経由で設定SDL_SetClipRect)、この関数はクリップ長方形と長方形の交点に基づいてクリップしdstrectdstrect長方形は次のように変更されます領域は実際に満たされています。」

これは、クリップの四角形が問題の原因であることを示しています。

そのクリップ四角形は、に含まれるプロパティSDL_Surfaceであり、おそらく (0,0) から始まります。SDL_FillRect()これにより、呼び出しが行われた後、負の数はすべて 0 になります。

のコピーへの参照を渡すことで、これを修正できますdstrect

ソース: http://www.libsdl.org/docs/html/sdlfillrect.html

于 2013-01-02T15:37:15.153 に答える