矩形与SDL一起消失
问题描述:
所以我只是试图让一个红色的10 x 10盒子来回垂直移动。我编译并运行我的程序,红框出现开始向下移动,然后在碰到屏幕边缘后消失。我使用了一些cout <<
语句,它们告诉我什么时候函数被调用,并且它们在应该被调用时都被调用。即使在看不见盒子的情况下,函数也能正确地被调用。矩形与SDL一起消失
我的主循环
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。只要有人想看更多的代码就留下评论。由于
答
没有足够的信息给出确凿的答案,但这里有一个提示。
根据我对SDL的经验,SDL函数可以在调用时修改Rect结构,特别是当rect部分在屏幕外时。确保你在之前设置了全部它的属性(x,y,宽度,高度)使用矩形的SDL函数。
+0
是的,我只是简单地添加了一个start_dest.h = 10;之前我的SDL_fillRect和它的工作!谢谢 – TheFuzz 2009-12-24 20:27:59
答
(我假设这里start_dest具有“高度”成员,并且该屏幕坐标有(0,0)在左上角)
我想也许是第一个“如果”语句在移动()应该是
if(start_dest.y >= my_screen.Get_height - start_dest.height)
,这样,当其底部击中屏幕的底部,而不是等到矩形的顶部到达那里的矩形会反弹。无论如何,这就是这个效果。
只是一个小窍门:如果你使用真正的调试器,你会发现bug比使用'cout'来填充你的程序要快得多,并且更加简洁。 – 2009-12-24 19:58:51
也许这个错误是由源代码中多余的感叹号造成的。 – avakar 2009-12-24 20:00:44
请告诉我:Get_height()返回什么值,以及y_step的初始值是什么。在我看来,他们喜欢以不同的单位说话,然后永远不会达到高潮,方向永远不会颠倒。 – 2009-12-24 20:10:26