开发者

rectangle disappearing with SDL

So I'm simply trying to make a red 10 x 10 box move vertically back and forth. I compile and run my program and the red box appears starts moving down, then just disappears after it hits the edge of the screen. I used some cout << statements that tell me when the functions are being called and they are all being called when they are supposed to. Even when the box can't be seen the functions are properly being called.

My main loop

while(running) 

    {

        myScreen->Clear();

        boxes.Move();

        boxes.Draw();

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

My draw() function

   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";

My Move() function

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;
   }

I have been trying to find this bug forever. just leave a comment if anyone wants to see more code. Tha开发者_开发知识库nks


There isn't enough information to give conclusive answer, but here's a hint.

From my experience with SDL, SDL functions can modify your Rect structure when called, especially when rect is partly off-screen. Make sure you set all its properties (x,y,width,height) before each SDL function that uses the rectangle.


(I'm assuming here that start_dest has a 'height' member, and that the screen coordinates have (0,0) in the top left corner)

I think perhaps the first 'if' statement in Move() should be

if(start_dest.y >= my_screen.Get_height - start_dest.height)

so that the rectangle will bounce when its bottom hits the bottom of the screen rather than waiting until the top of the rectangle gets there. Something to that effect, anyways.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜