优化键盘上下选择菜单,由抬起触发修改为按下触发

This commit is contained in:
chicrobot committed 2026-08-06 00:19:21 +08:00
1 parent 2896919bb9
commit 0159569c68
1 file changed
+47 -8
+47 -8
View File
@@ -24,6 +24,11 @@ class MainMenuScene(BaseScene):
self.secret_keys = ["w","w","s","s","a","d","a","d"] # 上上下下左右左右 self.secret_keys = ["w","w","s","s","a","d","a","d"] # 上上下下左右左右
self.secret_key_compare_num = 0 self.secret_key_compare_num = 0
self.select_id = 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.mouse_on_option = False
self.keyboard_ensure_status = False self.keyboard_ensure_status = False
@@ -52,6 +57,11 @@ class MainMenuScene(BaseScene):
print("我去,是通关秘籍!") print("我去,是通关秘籍!")
self.switch_to_scene("EmptyScene") 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() self.__show_ui()
@@ -68,8 +78,13 @@ class MainMenuScene(BaseScene):
self.mouse_pos = pygame.mouse.get_pos() self.mouse_pos = pygame.mouse.get_pos()
# 更新当前帧鼠标状态 # 更新当前帧鼠标状态
self.mouse_last_status = self.mouse_status 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): def handle_event(self, event):
""" """
@@ -79,9 +94,10 @@ class MainMenuScene(BaseScene):
keys = pygame.key.get_pressed() # 获取所有按键状态,用于组合按键判断 keys = pygame.key.get_pressed() # 获取所有按键状态,用于组合按键判断
if event.key == pygame.K_ESCAPE: if event.key == pygame.K_ESCAPE:
self.exit() # 退出游戏 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 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 self.keyboard_ensure_status = True
else: else:
self.keyboard_ensure_status = False self.keyboard_ensure_status = False
@@ -92,12 +108,18 @@ class MainMenuScene(BaseScene):
else: else:
self.secret_key_compare_num = 0 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.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_UP: # 处理上下键
self.select_id -= 1 if event.key == pygame.K_UP or event.key == pygame.K_w:
elif event.key == pygame.K_s or event.key == pygame.K_DOWN: self.up_status = False
self.select_id += 1 if event.key == pygame.K_DOWN or event.key == pygame.K_s:
self.select_id = self.select_id % len(self.text_rect_list) self.down_status = False
# 鼠标事件 # 鼠标事件
if event.type == pygame.MOUSEBUTTONDOWN: if event.type == pygame.MOUSEBUTTONDOWN:
@@ -116,6 +138,23 @@ class MainMenuScene(BaseScene):
return True return True
return False 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)): def __show(self, info, dest=(0, 0)):
""" """
显示调试文本 显示调试文本