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)): """ 显示调试文本