优化点击功能,抬起触发

This commit is contained in:
chicrobot committed 2026-07-30 23:08:33 +08:00
1 parent e71c302c23
commit b8b95377ce
1 file changed
+21 -4
+21 -4
View File
@@ -18,7 +18,8 @@ class MainMenuScene(BaseScene):
""" """
super().__init__(screen, clock) super().__init__(screen, clock)
self.button_status = False self.button_status = False
self.mouse_status = False self.mouse_status = None
self.mouse_last_status = None
self.debug_status = False self.debug_status = False
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
@@ -56,6 +57,8 @@ class MainMenuScene(BaseScene):
# 更新鼠标位置 # 更新鼠标位置
self.mouse_pos = pygame.mouse.get_pos() self.mouse_pos = pygame.mouse.get_pos()
# 更新当前帧鼠标状态
self.mouse_last_status = self.mouse_status
def handle_event(self, event): def handle_event(self, event):
""" """
@@ -74,8 +77,22 @@ class MainMenuScene(BaseScene):
else: else:
self.secret_key_compare_num = 0 self.secret_key_compare_num = 0
elif event.type == pygame.MOUSEBUTTONDOWN: # 鼠标事件
self.mouse_status = True if event.type == pygame.MOUSEBUTTONDOWN:
self.mouse_status = "down"
elif event.type == pygame.MOUSEBUTTONUP:
self.mouse_status = "up"
elif event.type == pygame.MOUSEMOTION:
self.mouse_status = "move"
def __click(self):
"""
判断是否点击鼠标:鼠标抬起时,上一帧的状态如果是按下或者移动则判断为点击
"""
if self.mouse_status == "up":
if self.mouse_last_status in ["down", "move"]:
return True
return False
def __show(self, info, dest=(0, 0)): def __show(self, info, dest=(0, 0)):
""" """
@@ -127,7 +144,7 @@ class MainMenuScene(BaseScene):
and text_rect.x < self.mouse_pos[0] < text_rect.x + text_rect.width: and text_rect.x < self.mouse_pos[0] < text_rect.x + text_rect.width:
pygame.draw.rect(self.screen, Color.white, text_rect, 1) pygame.draw.rect(self.screen, Color.white, text_rect, 1)
# 如果点击鼠标 # 如果点击鼠标
if self.mouse_status: if self.__click():
# 点击第一个选项 # 点击第一个选项
if count == 0: if count == 0:
self.switch_to_scene("GameScene") self.switch_to_scene("GameScene")