图形之让球反弹,,


  让球反弹

  如果想让球看起来会在窗口的边界反弹,就要知道它什么时候“碰到”窗口边界,然后让它朝反方向移动。如果想让球一直来回移动,就要在窗口左右两边都做同样的处理。

  在左边界,这很容易,因为我们只需要检查球的位置是不是等于0(或者某个很小的数)

  在右边界,就要查看球的右边界是不是在窗口的右边界上。不过,球的位置是按它的左边界(左上角)而不是右边界设置的,所以必须减去球的宽度。

  球向窗口右边移动时,位置达到550时要将它反弹(让它朝反方向移动)

  与孩子一起学编程-python教程

  为了让事情变得简单一些,我们要对代码做一些修改。

  我们希望球永远来回反弹(或者直到我们关闭Pygame窗口),因为已经有了一个while循环,只要窗口打开,这个while循环就一直运行,所以我们要把显示球的代码移到这个循环内部(这就是程序最后一部分中的while循环)

  并不总是将球的位置增加5,我们会建立一个新变量speed,用来确定每次迭代时以多快的速度移动球,我还打算把这个值设置为10,让球 稍稍加快速度。新代码见代码清单16-15.

  与孩子一起学编程-python教程

  让球在窗口两边反弹的关键是第18行和第19行,通过第18行的代码(if X >screen.get_width()-90orx<0:),检查球是否在窗口边界上,如果是,就在第19行让它的方向反转(x_speed=x_speed)。

  试试看效果怎么样

  在2-D空间中反弹

  到目前为止,我们只是让球来回移动,或者说这只是一个方向上的运动,现在,让时还会上下移动,为达到这个目的,只需要再做一些修改,如代码清单16-16所示。

  与孩子一起学编程-python教程

  我们在前面的程序中增加了第9行(y_speed=10)、第17行(y=y+y_speed)、第20行(ify>screen.get_height()-90ory<0)和第21行(y_speed=-y_speed)。现在试试看效果怎么样!

  如果想让球慢下来,有几种方法可以做到。

  可以减少速度变量(x_speed和y_speed),这会减少每一个动画步中球移动的距离,所以运动也会更流畅。

  还可以增加延迟设置,在代码清单16-16中,延迟是20,这是以毫秒为单位,也就是千分之一秒,所以每次循环时,程序会等待0.02秒,如果增加这个数值,运动会变慢,如果减少这个数值,运动就会加速。

  可以试着改变速度和延迟来看最后的效果。

评论关闭