请问为什么要在while循环再加入代码Bird.gravity=5和Bird.jumpSpeed=10?
读者你好:
1.达到的效果
这里设置的原因是为了实现一种效果,就是不按键盘时,小鸟下降越来越快。多次按下键盘,小鸟上升越来越慢。
2.代码的实现
在Bird类中,我们对初始化代码__init__中已经设置了gravity和jumpSpeed属性值,那么为什么还要在while循环中设置呢?这是因为__init__方法只会在实例化类的时候调用,也就是说在bird=Bird()这里调用,而这行代码是在while循环之外,所以,它执行了一次,后面载再渲染页面的时候,它已经不再执行了,所以,我们使用动态的方式,Bird.gravity=5和Bird.jumpSpeed=10 来赋值。
andy 发表于2019-07-19 09:32
读者你好:
1.达到的效果
这里设置的原因是为了实现一种效果,就是不按键盘时,小鸟下降越来越快。多次按下键盘,小鸟上升越来越慢。
2.代码的实现
在Bird类中,我们对初始化代码__init__中已经设置了gravity和jumpSpeed属性值,那么为什么还要在while循环中设置呢?这是因为__init__方法只会在实例化类的时候调用,也就是说在bird=Bird()这里调用,而这行代码是在while循环之外,所以,它执行了一次,后面载再渲染页面的时候,它已经不再执行了,所以,我们使用动态的方式,Bird.gravity=5和Bird.jumpSpeed=10 来赋值。
老师您好,while循环中的Bird.gravity与Bird类__init__初始化中的self.gravity是同一个值吧,都是实例属性。那么birdUpdate方法中的self.gravity-=1,就没有意义了呀,因为每次在whlie循环中都重新给Bird.gravity(或者self.gravity)赋值等于5了?
andy 发表于2019-07-19 13:46
你的问题非常好,而且你的理解是正确的,但是你忽略了游戏的一个特点,就是每一帧之间不能有太大的位置移动。
举个极端的例子。我们不按键盘,小鸟会一直下降。比如,gravity第一次循环是5,小鸟下降5,第二次6,下降6,那么第一百次gravity就变成100,下降100. 这时,你只点一下鼠标,小鸟上升jumpSpeed,上升10。 但是此时,gravity还是100,马上它会一下子下降100. 造成的后果就是从一个位置,突然跑到另一个位置了,这显然是不符合现实的。所以,每次while循环,都为它附一个初始值,保证它变化不会太大。