Pygame实战之外星人入侵NO.3——设定飞船的速率and活动范围

这次主要是设定飞船的运动速率,之前每按一次左右箭头飞船运动值为1,现在改变其值,如2.5,这样便能实现飞船以不同速率左右移动,可以在游戏中分等级或者难度大小来选择不同的模式;还有就是限定飞船的移动范围,保证其在屏幕以内运动,这里用到了self.rect.right<self.screen_rect.right和self.rect.left>0,因为屏幕的原点在左上角,所以rect的左边缘的x坐标大于零,就说明飞船未触及屏幕左边缘,向右同理, self.rect.right将返回飞船外接矩形的右边缘的x坐标。
首先在settings.py中增加对飞船移动的步长值:
self.ship_speed=2.5 #设定飞船的步长

在主程序中对Ship()的参数进行修改:
ship=Ship(screen,ai_settings)  #实例化Ship

在ship.py中的变动比较大,首先要接受参数ai_settings,在初始化函数中添加对应项:
self.ai_settings=ai_settings

然后声明新属性center,用于存储小数值:
 self.center=float(self.rect.centerx)

因为rect.centerx只存储整数值,所以要用float转换一下。
接着是对飞船运动的更新:
def update(self):   #按左右箭头实现centerx的变化
        if self.moving_right and self.rect.right<self.screen_rect.right:#控制飞船的活动范围
            self.center += self.ai_settings.ship_speed  
        if self.moving_left and self.rect.left>0:
            self.center -= self.ai_settings.ship_speed  
        #用center来更新centerx
        self.rect.centerx=self.center

大家注意到在最后赋值时centerx只能存储center的整数部分,不过这也无所谓,比如一开始的初值是1,那第一次移动的值为(1+2.5=3.5)的整数部分,即3,再一次为(3.5+2.5=6.0)的整数部分,即为6,这样对飞船的移动影响是比较小的。
最后对game_functions.py代码进行重构,使之更加明了,分别处理左右箭头的“按”与“松”,其中“按下”部分代码为:
def check_keydown(event,ship):
    if event.key==pygame.K_RIGHT:
        ship.moving_right=True #若按下右箭头则使ship.rect.centerx加步长值
    elif event.key==pygame.K_LEFT:
        ship.moving_left=True #注意这里若同时按下左右箭头将检测到两个不同事件

注意到参数,要加上event,在check_events(ship)中调用时直接调用函数:
 elif event.type==pygame.KEYDOWN:
      check_keydown(event,ship)
 elif event.type==pygame.KEYUP:
      check_keyup(event,ship)

大概就是这个样子。。效果图也不是很好展示,反正速度的确快了。。 得意
最后再说下重构吧,我觉得前期先编写简单易懂的代码,到一定体量后将其中部分功能提取出来独立成函数,这里面涉及到很多问题吧,以后多多练习,希望能够把握其命脉……
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond_LH

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值