From 0159569c68f84214bd90867a77b9fea95e49d155 Mon Sep 17 00:00:00 2001 From: chicrobot Date: Thu, 6 Aug 2026 00:19:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=AE=E7=9B=98=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E9=80=89=E6=8B=A9=E8=8F=9C=E5=8D=95=EF=BC=8C=E7=94=B1?= =?UTF-8?q?=E6=8A=AC=E8=B5=B7=E8=A7=A6=E5=8F=91=E4=BF=AE=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E6=8C=89=E4=B8=8B=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/scenes/main_menu_scene.py | 55 ++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 8 deletions(-) diff --git a/src/scenes/main_menu_scene.py b/src/scenes/main_menu_scene.py index 361f86e..435db61 100644 --- a/src/scenes/main_menu_scene.py +++ b/src/scenes/main_menu_scene.py @@ -24,6 +24,11 @@ class MainMenuScene(BaseScene): self.secret_keys = ["w","w","s","s","a","d","a","d"] # 上上下下左右左右 self.secret_key_compare_num = 0 self.select_id = 0 + self.up_status = False + self.up_last_status = False + self.down_status = False + self.down_last_status = False + self.mouse_on_option = False self.keyboard_ensure_status = False @@ -52,6 +57,11 @@ class MainMenuScene(BaseScene): print("我去,是通关秘籍!") self.switch_to_scene("EmptyScene") + if self.__up(): + self.select_id -= 1 + if self.__down(): + self.select_id += 1 + self.select_id = self.select_id % len(self.text_rect_list) # 显示选项文本 self.__show_ui() @@ -68,8 +78,13 @@ class MainMenuScene(BaseScene): self.mouse_pos = pygame.mouse.get_pos() # 更新当前帧鼠标状态 self.mouse_last_status = self.mouse_status + # 更新当前帧上下按键状态 + self.up_last_status = self.up_status + self.down_last_status = self.down_status - # self.__show(self.select_id) + # 调试文本 + # self.__show(self.up_status) + # self.__show(self.up_last_status, (0, 20)) def handle_event(self, event): """ @@ -79,9 +94,10 @@ class MainMenuScene(BaseScene): keys = pygame.key.get_pressed() # 获取所有按键状态,用于组合按键判断 if event.key == pygame.K_ESCAPE: self.exit() # 退出游戏 - elif keys[pygame.K_z] and keys[pygame.K_x]: # 同时按下Z和X + if keys[pygame.K_z] and keys[pygame.K_x]: # 同时按下Z和X self.button_status = True - elif event.key == pygame.K_SPACE or event.key == pygame.K_RETURN: + # 处理空格和enter + if event.key == pygame.K_SPACE or event.key == pygame.K_RETURN: self.keyboard_ensure_status = True else: self.keyboard_ensure_status = False @@ -92,12 +108,18 @@ class MainMenuScene(BaseScene): else: self.secret_key_compare_num = 0 + # 处理上下键 + if event.key == pygame.K_UP or event.key == pygame.K_w: + self.up_status = True + if event.key == pygame.K_DOWN or event.key == pygame.K_s: + self.down_status = True + if event.type == pygame.KEYUP: - if event.key == pygame.K_w or event.key == pygame.K_UP: - self.select_id -= 1 - elif event.key == pygame.K_s or event.key == pygame.K_DOWN: - self.select_id += 1 - self.select_id = self.select_id % len(self.text_rect_list) + # 处理上下键 + if event.key == pygame.K_UP or event.key == pygame.K_w: + self.up_status = False + if event.key == pygame.K_DOWN or event.key == pygame.K_s: + self.down_status = False # 鼠标事件 if event.type == pygame.MOUSEBUTTONDOWN: @@ -116,6 +138,23 @@ class MainMenuScene(BaseScene): return True return False + def __up(self): + """ + 判断是否按下上键:按下时,上一帧的状态是未按下则判断为按下 + """ + if self.up_status: + if not self.up_last_status: + return True + return False + def __down(self): + """ + 判断是否按下下键:按下时,上一帧的状态是未按下则判断为按下 + """ + if self.down_status: + if not self.down_last_status: + return True + return False + def __show(self, info, dest=(0, 0)): """ 显示调试文本