在跟练《外星人入侵》这个项目时遇到了个问题,希望大佬可以帮忙看下
飞船不能用键盘控制,即使是执行随时附赠的代码也是一样
下面是代码
import sys # 导入 sys 模块,用于退出程序 import pygame # 导入 pygame 模块,用于创建游戏窗口和处理事件 from settings import Settings from ship import Ship class AlienInvasion: # 定义一个类,表示外星人入侵的游戏 """一个管理游戏资源和行为的类""" def __init__(self) -> None: # 定义初始化方法,设置游戏的属性 """初始化游戏并创建游戏资源""" pygame.init() # 初始化 pygame ,准备显示模式和其他设置 self.settings = Settings() self.clock = pygame.time.Clock() # 创建一个时钟对象,用于控制游戏的帧率 self.screen = pygame.display.set_mode( (self.settings.screen_height, self.settings.screen_width) ) # 创建一个屏幕对象,设置分辨率为 3842x2160 pygame.display.set_caption("Alien Invasion") # 设置屏幕的标题为“Alien Invasion” # 设置背景色 # self.bg_color = (230, 230, 230) self.ship = Ship(self) def run_game(self): """开始游戏的主循环""" while True: self._check_events() self._update_screen() # 每秒钟最多更新 60 次画面 self.clock.tick(60) def _check_events(self): for event in pygame.event.get(): # 如果用户单击了关闭按钮,退出程序 if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: self.ship.moving_right = True elif event.key == pygame.K_LEFT: self.ship.moving_left = True # self.ship.rect.x += 1 elif event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT: self.ship.moving_right = False elif event.key == pygame.K_LEFT: self.ship.moving_left = False def _update_screen(self): # 每次循环都重绘屏幕 self.screen.fill(self.settings.bg_color) self.ship.blitme() # 更新屏幕上的图像,并切换到新屏幕 pygame.display.flip() if __name__ == "__main__": # 创建游戏实例并运行游戏 ai = AlienInvasion() ai.run_game() if __name__ == "__main__": # 创建游戏实例并运行游戏 ai = AlienInvasion() ai.run_game() import pygame # 导入 pygame 模块,用于创建游戏窗口和处理图形 class Ship: """一个表示飞船的类""" def __init__(self, ai_game) -> None: """初始化飞船并设置其初始位置""" self.screen = ai_game.screen # 获取游戏窗口对象 self.screen_rect = ai_game.screen.get_rect() # 获取游戏窗口的矩形属性 self.image = pygame.image.load( "E:/alien_invasion/images/ship.bmp" ) # 加载飞船的图像文件 self.rect = self.image.get_rect() # 获取飞船图像的矩形属性 self.rect.midbottom = self.screen_rect.midbottom # 将飞船的中下方对齐到游戏窗口的中下方 # 移动标志(飞船一开始不移动) self.moving_right = False self.moving_left = False def update(self): if self.moving_right: self.rect.x += 1 if self.moving_left: self.rect.x -= 1 def blitme(self): """在指定位置绘制飞船""" self.screen.blit(self.image, self.rect) # 使用 pygame 的 blit 方法将飞船图像绘制到游戏窗口上 