关于函数放置位置

关于函数放置位置

http://img1.sycdn.imooc.com//climg/5ecb37a309ef779600000000.jpg

老师您好,在update更新子弹的位置这里,对于绘制子弹的指令,放在开头和放在最后有什么区别么

我个人理解是,这里只调用了一次update函数,如果放在最后,那么他前面的几个语句比如self.rect.top -= self.speed就无法执行,

但是实际结果却是,放在前面和后面没有区别,在运行时效果一样

麻烦老师讲解一下,这个指令是不是既能放在开头也能放在结尾,还有为什么放在结尾,上面的指令也能实行的

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好:在帧速率调为1可以方便同学观察,修改代码如下:

http://img1.sycdn.imooc.com//climg/5ecba20709cfb25304920323.jpg

放在第一行时,代码如下:

http://img1.sycdn.imooc.com//climg/5ecba14e09b1d6a306410307.jpg

第一次update()子弹的位置:

http://img1.sycdn.imooc.com//climg/5ecba12709961b8d02380217.jpg

放在后面时代码如下:

http://img1.sycdn.imooc.com//climg/5ecba19409e56d8706370305.jpg

第一次update()时子弹的位置:

http://img1.sycdn.imooc.com//climg/5ecba17e092faad002160235.jpg

所以放在第一行和后面实际上是有区别的,只不过刷新太快不容易看出来。

如果解决了你的疑惑,请采纳,祝学习愉快~


好帮手慕觉浅 2020-05-25 14:46:41

同学你好:放在第一行的话本次update()是无法执行其他语句的,但该属性被修改了,在下次执行update()时第一行bilt()就可以将上次修改的属性绘制在屏幕上,再加上在游戏中发射一颗子弹后会不断调用update()更新位置,速度很快,执行到哪次的update()改变的那些属性用肉眼可能是看不出来的,所以看起来效果一样。

如果解决了你的疑惑,请采纳,祝学习愉快~


  • 觉浅老师,那么第一颗子弹是不是就不会被修改呢?也不会执行下面的self.rect.top-=self.speed 这个语句了,那么这颗子弹应该一直停留在屏幕中不动的呀
    2020-05-25 18:01:31
  • 同学你好:并不是第一颗子弹对应的是第一次调用update(),而是每次屏幕刷新对应某个子弹对象调用一次update(),一秒之内屏幕会刷新60次(如果帧速率设置为60:self.clock.tick(60)),也就是60次调用update()。在第一次调用update()时没有变化,只修改了self.rect.top的属性,在第二次调用update()时设置的该属性就会显现出来。 同学可以将帧速率调到最小值1(self.clock.tick(1))来观察一下子弹刚发射时,是可以看出区别的。如果将self.screen.blit(self.image, self.rect)写在第一行则刚发射子弹时子弹的初始位置会靠下一些,就是因为没有执行到self.rect.top-=self.speed没有改变位置。但下一秒就向上移动了因为又调用了update()。帧速率较快时则无法用肉眼看出差别。
    2020-05-25 18:40:41
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师