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)

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

猜你喜欢

转载自blog.csdn.net/u014483914/article/details/79980921