прямоугольник исчезает с SDL - PullRequest
1 голос
/ 24 декабря 2009

Так что я просто пытаюсь заставить красное поле 10 х 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";

Функция My Move ()

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

Я пытался найти эту ошибку навсегда. просто оставьте комментарий, если кто-то хочет увидеть больше кода. Спасибо

Ответы [ 2 ]

1 голос
/ 24 декабря 2009

Недостаточно информации, чтобы дать окончательный ответ, но вот подсказка.

Исходя из моего опыта работы с SDL, функции SDL могут изменять структуру Rect при вызове, особенно, когда rect частично находится за пределами экрана. Убедитесь, что вы установили все его свойства (x, y, ширина, высота) перед каждой функцией SDL, которая использует прямоугольник.

0 голосов
/ 24 декабря 2009

(здесь я предполагаю, что start_dest имеет элемент 'height' и координаты экрана имеют (0,0) в верхнем левом углу)

Я думаю, что, возможно, первое выражение if в Move () должно быть

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

, так что прямоугольник отскочит, когда его нижняя часть достигнет нижней части экрана, а не будет ждать, пока верхняя часть прямоугольника не окажется там. В любом случае, что-то на этот счет.

...