所以我只是想让一个红色的10 x 10盒子来回垂直移动。我编译并运行我的程序,红色框出现开始向下移动,然后在它到达屏幕边缘后消失。我使用了一些cout <<
语句告诉我何时调用这些函数,并且它们都应该被调用。即使无法看到方框,也可正确调用这些功能。
while(running)
{
myScreen->Clear();
boxes.Move();
boxes.Draw();
myScreen->Flip();
........
SDL_Color red;
red.r = 255;
red.g = 0;
red.b = 0;
if( SDL_FillRect( my_screen->Get_screen(), &start_dest, SDL_MapRGB(
my_screen->Get_pixel_format(), red.r, red.g, red.b ) ) == -1 )`
cout << "Fill rect in Draw(); failed\n";
start_dest.y += y_step;
if ( start_dest.y >= my_screen->Get_height() )
{
cout << "start_dest.y >= screen height\n";
start_dest.y = my_screen->Get_height();
y_step = -y_step;
}
if ( start_dest.y <= 0 )
{
cout << "start_dest.y <= 0\n";
start_dest.y = 0;
y_step = -y_step;
}
我一直试图永远找到这个bug。如果有人想要查看更多代码,请发表评论。感谢
答案 0 :(得分:1)
没有足够的信息可以给出确凿的答案,但这是一个暗示。
根据我对SDL的经验,SDL函数可以在调用时修改Rect结构,尤其是当rect部分在屏幕外时。确保在使用矩形的每个 SDL函数之前设置所有其属性(x,y,width,height)。
答案 1 :(得分:0)
(我假设start_dest有一个'height'成员,并且屏幕坐标左上角有(0,0))
我想也许Move()中的第一个'if'语句应该是
if(start_dest.y >= my_screen.Get_height - start_dest.height)
这样矩形会在其底部触及屏幕底部时反弹,而不是等到矩形顶部到达那里。无论如何,还有一些东西。