次のコード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 に移動されています。これは、私の表示計算から外れています。なにが問題ですか?明らかな何かが欠けていますか?