tags:

views:

64

answers:

2

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. Thanks

A: 

(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.

Bob Jarvis
+1  A: 

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.

Milan Babuškov
Yep i simply added a start_dest.h = 10; before my SDL_fillRect and it worked! thanks
TheFuzz