矩形随SDL消失

时间:2009-12-24 19:54:24

标签: c++ sdl

所以我只是想让一个红色的10 x 10盒子来回垂直移动。我编译并运行我的程序,红色框出现开始向下移动,然后在它到达屏幕边缘后消失。我使用了一些cout <<语句告诉我何时调用这些函数,并且它们都应该被调用。即使无法看到方框,也可正确调用这些功能。

我的主循环

while(running) 

    {

        myScreen->Clear();

        boxes.Move();

        boxes.Draw();

        myScreen->Flip();
                ........

我的draw()函数

   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。如果有人想要查看更多代码,请发表评论。感谢

2 个答案:

答案 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)

这样矩形会在其底部触及屏幕底部时反弹,而不是等到矩形顶部到达那里。无论如何,还有一些东西。