我试图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
第三行(第一个显示的矩形)以某种方式从 -50 移动到 0。它正在抛出我的显示计算。怎么了?我错过了一些明显的东西吗?