Pygame实战之外星人入侵NO.8——动起来,外星人

成群的外星人已经出现了,是时候发起进攻了,接下来就让他们动起来。
首先在settings.py中添加对于外星人移动速度和方向的设置:
 self.alien_speed=1 #设置外星人的步长
 self.aliens_down_speed=5 #外星人向下的速度
 self.aliens_x=1 #该属性为外星人左右移动的方向,1代表往右,-1代表往左

为了方便就不按步骤一点点来了,第一个属性是外星人左右移动的速度,即步长,第二个是外星人向下移动的步长,第三个控制左右移动的方向。
在alien.py中检查外星人是否撞到了左右屏幕边缘:
 def check_edge(self):
        screen_rect=self.screen.get_rect()
        if self.rect.right>=screen_rect.right:  #判断外星人是否位于屏幕的右边缘
            return True
        elif self.rect.left<=0: #判左边缘
            return True
      
    def update(self):#向左或右移动外星人
        self.x+=self.ai_settings.alien_speed*self.ai_settings.aliens_x  #属性self.x确定每个外星人的准确位置,可存储小数值
        #将外星人的位置设置为速度和方向的乘积,改变坐标来实现左右移动
        self.rect.x=self.x  #更新外星人的rect的位置

注释已经说的比较清楚了,这里就体现了aliens_x取值的妙处,通过正负值来改变x坐标的大小,因此来实现外星人左右移动。
重头戏在game_function.py中,这里变动比较大:
def check_aliens_edge(ai_settings,aliens):#检查每个外星人是否到达边缘,然后采取相应措施
    for alien in aliens.sprites():
        if alien.check_edge():
            change_aliens_xy(ai_settings,aliens)
            break
def  change_aliens_xy(ai_settings,aliens): #将外星人向下移动一定距离然后改变左右方向
    for alien in aliens.sprites():
        alien.rect.y+=ai_settings.aliens_down_speed
    ai_settings.aliens_x*=-1    
def update_aliens(ai_settings,aliens): #更新编组中所有外星人的位置,将自动对每个外星人调用方法update()
    check_aliens_edge(ai_settings,aliens)
    aliens.update()        

第一个函数要用到第二个函数,第三个函数要用到第一个函数,各有各的工作,分而治之,比较爽……
最后在主程序中调用update_aliens():
 while True:
        gf.check_events(ship,ai_settings,screen,bullets) #更改事件监听函数
        ship.update()  #每次循环都访问该函数,保证飞船的位置将在检测到键盘事件后(但在更新屏幕前)更新
        gf.update_bullets(bullets)  
        gf.update_aliens(ai_settings,aliens)
        gf.update_screen(ai_settings,screen,ship,bullets,aliens)   

实现效果为外星人群左右来回移动,并在抵达屏幕边缘后向下移动,这里只能展示静态图了:

你可能感兴趣的:(Pygame游戏实战)