修复每帧时间在场景中更新造成的雨滴状态没有随机分布的问题

This commit is contained in:
chicrobot committed 2026-07-31 01:57:17 +08:00
1 parent b864a5e82e
commit 75a8525985
5 files changed
+19 -20

No files matched your search

+2 -3
View File
@@ -1,15 +1,14 @@
import pygame import pygame
class BaseScene: class BaseScene:
def __init__(self, screen: pygame.Surface, clock: pygame.time.Clock): def __init__(self, screen: pygame.Surface):
""" """
初始化场景,接收并保存画布、计时器 初始化场景,接收并保存画布、计时器
""" """
self.screen = screen self.screen = screen
self.clock = clock
self.next_scene = None self.next_scene = None
def update(self): def update(self, dt=0):
""" """
场景的每帧更新逻辑 场景的每帧更新逻辑
""" """
+3 -3
View File
@@ -4,10 +4,10 @@ from src.scenes.base_scene import BaseScene
class EmptyScene(BaseScene): class EmptyScene(BaseScene):
name = "EmptyScene" # 场景名称 name = "EmptyScene" # 场景名称
def __init__(self, screen, clock): def __init__(self, screen):
super().__init__(screen, clock) super().__init__(screen)
def update(self): def update(self, dt=0):
""" """
场景每帧更新逻辑 场景每帧更新逻辑
""" """
+3 -3
View File
@@ -8,8 +8,8 @@ from src.scenes.base_scene import BaseScene
class GameScene(BaseScene): class GameScene(BaseScene):
name = "GameScene" name = "GameScene"
def __init__(self, screen, clock): def __init__(self, screen):
super().__init__(screen, clock) super().__init__(screen)
# 初始化音乐 # 初始化音乐
pygame.mixer.init() pygame.mixer.init()
# 播放并循环音乐 # 播放并循环音乐
@@ -32,7 +32,7 @@ class GameScene(BaseScene):
self.RED = (255, 0, 0) self.RED = (255, 0, 0)
self.BLUE = (0, 0, 255) self.BLUE = (0, 0, 255)
def update(self): def update(self, dt=0):
if self.back_status: if self.back_status:
self.switch_to_scene("MainMenuScene") self.switch_to_scene("MainMenuScene")
if self.Left_status and self.dirty_x >= 0: if self.Left_status and self.dirty_x >= 0:
+5 -7
View File
@@ -12,11 +12,11 @@ class MainMenuScene(BaseScene):
""" """
主菜单场景,显示提示信息,展示雨天特效 主菜单场景,显示提示信息,展示雨天特效
""" """
def __init__(self, screen, clock): def __init__(self, screen):
""" """
初始化函数,初始化按钮按下状态、雨滴列表 初始化函数,初始化按钮按下状态、雨滴列表
""" """
super().__init__(screen, clock) super().__init__(screen)
self.button_status = False self.button_status = False
self.mouse_status = None self.mouse_status = None
self.mouse_last_status = None self.mouse_last_status = None
@@ -44,7 +44,7 @@ class MainMenuScene(BaseScene):
# 鼠标位置 # 鼠标位置
self.mouse_pos = (0, 0) self.mouse_pos = (0, 0)
def update(self): def update(self, dt=0):
# 按键按下则切换场景 # 按键按下则切换场景
if self.button_status: if self.button_status:
self.switch_to_scene("GameScene") self.switch_to_scene("GameScene")
@@ -62,7 +62,7 @@ class MainMenuScene(BaseScene):
self.handle_keyboard() self.handle_keyboard()
# 雨滴坠落 # 雨滴坠落
self.rain_fall() self.rain_fall(dt)
# 更新鼠标位置 # 更新鼠标位置
self.mouse_pos = pygame.mouse.get_pos() self.mouse_pos = pygame.mouse.get_pos()
@@ -216,12 +216,10 @@ class MainMenuScene(BaseScene):
self.__rain_list_append(status) self.__rain_list_append(status)
def rain_fall(self): def rain_fall(self, dt):
""" """
展示雨滴画面 展示雨滴画面
""" """
dt = self.clock.tick()
for rain in self.rain_list: for rain in self.rain_list:
# 当状态在区间1时绘制雨滴线条 # 当状态在区间1时绘制雨滴线条
+6 -4
View File
@@ -19,7 +19,7 @@ class Game:
# 场景字典 # 场景字典
self.game_scenes = scene_dict self.game_scenes = scene_dict
# 当前场景 # 当前场景
self.scene = self.game_scenes["MainMenuScene"](self.screen, self.clock) self.scene = self.game_scenes["MainMenuScene"](self.screen)
# 运行循环 # 运行循环
self.running = True self.running = True
@@ -27,6 +27,8 @@ class Game:
def run(self): def run(self):
while self.running: while self.running:
# 更新每帧时间
dt = self.clock.tick()
# 事件处理 # 事件处理
for event in pygame.event.get(): # 这里已经获取了事件,事件队列被清空,在场景的update中再次获取将没有事件 for event in pygame.event.get(): # 这里已经获取了事件,事件队列被清空,在场景的update中再次获取将没有事件
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
@@ -37,13 +39,13 @@ class Game:
if self.scene.next_scene is not None: if self.scene.next_scene is not None:
if self.scene.next_scene in self.game_scenes.keys(): if self.scene.next_scene in self.game_scenes.keys():
scene_class = self.game_scenes[self.scene.next_scene] scene_class = self.game_scenes[self.scene.next_scene]
self.scene = scene_class(self.screen, self.clock) self.scene = scene_class(self.screen)
# 清屏 # 清屏
self.screen.fill(GameConfig.bg_color) self.screen.fill(GameConfig.bg_color)
# 场景每帧更新逻辑运行 # 场景每帧更新逻辑运行
self.scene.update() self.scene.update(dt)
# 当场景的下一场景为exit时退出游戏 # 当场景的下一场景为exit时退出游戏
if self.scene.next_scene == "exit": if self.scene.next_scene == "exit":
self.running = False self.running = False
@@ -52,4 +54,4 @@ class Game:
pygame.display.update() pygame.display.update()
if __name__ == "__main__": if __name__ == "__main__":
Game() Game()