赞
踩
python项目《外星人入侵》增加上下操作
目的:
ship.py(新增y轴存储,飞船移动及上下边界):
import pygame class Ship(): def __init__(self,ai_settings,screen): '''初始化飞船并设置其初始位置''' self.screen = screen self.ai_settings = ai_settings #加载飞船图像并获取外接矩形 self.image = pygame.image.load('image/ship.png') self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() #将每个新飞船图像放在屏幕地步中央 self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom #在飞船的属性center中存储小数值 self.centerx = float(self.rect.centerx) self.centery = float(self.rect.centery) #移动标志 self.moving_right = False self.moving_left = False self.moving_up = False self.moving_down = False def update(self): '''根据移动标志调整飞船的位置''' if self.moving_right and self.rect.right < self.screen_rect.right: self.centerx += self.ai_settings.ship_speed_factor if self.moving_left and self.rect.left > 0 : self.centerx -= self.ai_settings.ship_speed_factor if self.moving_down and self.rect.bottom < self.screen_rect.bottom: self.centery += self.ai_settings.ship_speed_factor if self.moving_up and self.rect.top > 0 : self.centery -= self.ai_settings.ship_speed_factor #根据self.center更新rect对象 self.rect.centerx = self.centerx self.rect.centery = self.centery def bitme(self): '''在指定位置绘制飞船''' self.screen.blit(self.image,self.rect)
game_functions.py(新增上下响应):
import sys import pygame def check_keydown_events(event,ship): '''响应按键''' if event.key == pygame.K_RIGHT: ship.moving_right = True if event.key == pygame.K_LEFT: ship.moving_left = True if event.key == pygame.K_UP: ship.moving_up = True if event.key == pygame.K_DOWN: ship.moving_down = True def check_keyup_event(event,ship): '''响应松开''' if event.key == pygame.K_RIGHT: ship.moving_right = False if event.key == pygame.K_LEFT: ship.moving_left = False if event.key == pygame.K_UP: ship.moving_up = False if event.key == pygame.K_DOWN: ship.moving_down = False def check_events(ship): '''响应按键和鼠标事件''' for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type ==pygame.KEYDOWN: check_keydown_events(event,ship) elif event.type ==pygame.KEYUP: check_keyup_event(event,ship) def update_screen(ai_settings,screen,ship): '''更新屏幕上的图像,并切换到新屏幕''' # 每次循环时都重绘制屏幕 screen.fill(ai_settings.bg_color) ship.bitme() # 让最近绘制的屏幕可见 pygame.display.flip()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。