已有184人关注
请问为什么要在while循环再加入代码Bird.gravity=5和Bird.jumpSpeed=10?
还有0人有此问题
发表在Python图书答疑 2019-07-18 《零基础学Python》
是否精华
版块置顶:

请问为什么要在while循环再加入代码Bird.gravity=5和Bird.jumpSpeed=10?

分享到:
精彩评论 5
andy
学分:2118 LV10
TA的每日心情
继续努力
2017-02-06 23:42:34
2019-07-19
沙发

读者你好:

    1.达到的效果

    这里设置的原因是为了实现一种效果,就是不按键盘时,小鸟下降越来越快。多次按下键盘,小鸟上升越来越慢。

    2.代码的实现

    在Bird类中,我们对初始化代码__init__中已经设置了gravity和jumpSpeed属性值,那么为什么还要在while循环中设置呢?这是因为__init__方法只会在实例化类的时候调用,也就是说在bird=Bird()这里调用,而这行代码是在while循环之外,所以,它执行了一次,后面载再渲染页面的时候,它已经不再执行了,所以,我们使用动态的方式,Bird.gravity=5和Bird.jumpSpeed=10 来赋值。 

努力奋斗_1587890695
学分:34 LV2
2019-07-19
板凳

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
学分:2118 LV10
TA的每日心情
继续努力
2017-02-06 23:42:34
2019-07-19
地板

你的问题非常好,而且你的理解是正确的,但是你忽略了游戏的一个特点,就是每一帧之间不能有太大的位置移动。

举个极端的例子。我们不按键盘,小鸟会一直下降。比如,gravity第一次循环是5,小鸟下降5,第二次6,下降6,那么第一百次gravity就变成100,下降100. 这时,你只点一下鼠标,小鸟上升jumpSpeed,上升10。 但是此时,gravity还是100,马上它会一下子下降100. 造成的后果就是从一个位置,突然跑到另一个位置了,这显然是不符合现实的。所以,每次while循环,都为它附一个初始值,保证它变化不会太大。

努力奋斗_1587890695
学分:34 LV2
2019-07-19
4L

andy 发表于2019-07-19 13:46

你的问题非常好,而且你的理解是正确的,但是你忽略了游戏的一个特点,就是每一帧之间不能有太大的位置移动。

举个极端的例子。我们不按键盘,小鸟会一直下降。比如,gravity第一次循环是5,小鸟下降5,第二次6,下降6,那么第一百次gravity就变成100,下降100. 这时,你只点一下鼠标,小鸟上升jumpSpeed,上升10。 但是此时,gravity还是100,马上它会一下子下降100. 造成的后果就是从一个位置,突然跑到另一个位置了,这显然是不符合现实的。所以,每次while循环,都为它附一个初始值,保证它变化不会太大。

谢谢老师的讲解,理解了
湾湾ShaNe_1697614022
学分:76 LV3
2021-02-20
5L

很明显,代码中gravity没有工作啊。bird.jump 当你单击鼠标时候,一直是True,没有任何代码让它边False,所以小鸟下坠的原因和gravity没关系,而是因为jumpspeed从正值变成了负值,所以老师,这边代码是不是有问题?

首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照