pygame中外星人入侵项目,飞船移动问题。
#当按一次右键或左键,飞船就会一直移动至屏幕边缘,且再按左键或右键时,飞船不会移动
#和书上代码反复核对过,没发现问题,求求大佬帮帮孩子吧~
#代码如下
_alien_invasion.py_
import sys
import pygame
import game_functions as gf
from settings import Settings
from ship import Ship
def run_game():
'''初始化游戏并创建一个屏幕对象'''
pygame.init() # 初始化背景设置
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height)) # 绘制游戏屏幕
pygame.display.set_caption('alien invasion') # 屏幕标题
# 创建一艘飞船
ship = Ship(ai_settings, screen) # screen实参
# 开始游戏的主循环
while True:
gf.check_event(ship) # 这里的ship是实参
ship.update()
gf.update_screen(ai_settings, screen, ship)
run_game()
ship.py
import sys
import pygame
def check_keydown_events(event, ship):
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
def check_keyup_events(event, ship):
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
def check_event(ship):
'''捕获按键和鼠标事件'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN: # type 类别
check_keydown_events(event, ship)
elif event.type == pygame.KEYUP:
check_keyup_events(event, ship)
def update_screen(ai_settings, screen, ship):
'''更新屏幕上的图像,并切换新屏幕'''
# 每次循环都会绘制新屏幕
screen.fill(ai_settings.screen_color) # 设置屏幕背景色 方法screen.fill()只接受一个实参
ship.blit()
pygame.display.flip() # 让最近绘制的屏幕可见 # flip浏览
game_functions.py__
import sys
import pygame
def check_keydown_events(event, ship):
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
def check_keyup_events(event, ship):
if event.key == pygame.K_RIGHT:
ship.moving_right = True
elif event.key == pygame.K_LEFT:
ship.moving_left = True
def check_event(ship):
'''捕获按键和鼠标事件'''
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN: # type 类别
check_keydown_events(event, ship)
elif event.type == pygame.KEYUP:
check_keyup_events(event, ship)
def update_screen(ai_settings, screen, ship):
'''更新屏幕上的图像,并切换新屏幕'''
# 每次循环都会绘制新屏幕
screen.fill(ai_settings.screen_color) # 设置屏幕背景色 方法screen.fill()只接受一个实参
ship.blit()
pygame.display.flip() # 让最近绘制的屏幕可见 # flip浏览