如果想让球看起来会在窗口的边界反弹,就要知道它什么时候“碰到”窗口边界,然后让它朝反方向移动。如果想让球一直来回移动,就要在窗口左右两边都做同样的处理。
在左边界,这很容易,因为我们只需要检查球的位置是不是等于 0(或者某个很小的数)。
在右边界,就要查看球的右边界是不是在窗口的右边界上。不过,球的位置是按它的左边界(左上角)而不是右边界设置的。所以必须减去球的宽度:
球向窗口右边移动时,位置达到 550 时要将它反弹(让它朝反方向移动)。
为了让事情变得简单一些,我们要对代码做一些修改。
新代码见代码清单 16-14。
代码清单 16-14 让沙滩球反弹
让球在窗口两边反弹的关键是第 19 行和第 20 行。通过第 19 行的代码(if x> screen.get_width-90orx<0:),检查球是否在窗口边界上,如果是,就在第 20 行让它的方向反转(x_speed=-x_speed)。
试试看效果怎么样。
在 2D 空间中反弹
到目前为止,我们只是让球来回移动,或者说这只是一个方向上的运动。现在,让它同时还会上下移动。为达到这个目的,只需要再做一些修改,如代码清单 16-15 所示。
代码清单 16-15 在 2D 空间中让沙滩球反弹
我们在前面的程序中增加了第 9 行(y_speed=10)、第 18 行(y=y+y_speed)、第 21 行(ify> screen.get_height-90ory<0:) 和 第 22 行(y_speed=-y_speed)。现在试试看效果怎么样!
如果想让球慢下来,有几种方法可以做到。
可以试着改变速度和延迟来看最后的效果。