diff --git a/src/scenes/base_scene.py b/src/scenes/base_scene.py index 20ba901..89379fb 100644 --- a/src/scenes/base_scene.py +++ b/src/scenes/base_scene.py @@ -1,15 +1,14 @@ import pygame class BaseScene: - def __init__(self, screen: pygame.Surface, clock: pygame.time.Clock): + def __init__(self, screen: pygame.Surface): """ 初始化场景,接收并保存画布、计时器 """ self.screen = screen - self.clock = clock self.next_scene = None - def update(self): + def update(self, dt=0): """ 场景的每帧更新逻辑 """ diff --git a/src/scenes/empty_scene.py b/src/scenes/empty_scene.py index 05d9c0c..2878547 100644 --- a/src/scenes/empty_scene.py +++ b/src/scenes/empty_scene.py @@ -4,10 +4,10 @@ from src.scenes.base_scene import BaseScene class EmptyScene(BaseScene): name = "EmptyScene" # 场景名称 - def __init__(self, screen, clock): - super().__init__(screen, clock) + def __init__(self, screen): + super().__init__(screen) - def update(self): + def update(self, dt=0): """ 场景每帧更新逻辑 """ diff --git a/src/scenes/game_scene.py b/src/scenes/game_scene.py index a4c0eca..a2842b7 100644 --- a/src/scenes/game_scene.py +++ b/src/scenes/game_scene.py @@ -8,8 +8,8 @@ from src.scenes.base_scene import BaseScene class GameScene(BaseScene): name = "GameScene" - def __init__(self, screen, clock): - super().__init__(screen, clock) + def __init__(self, screen): + super().__init__(screen) # 初始化音乐 pygame.mixer.init() # 播放并循环音乐 @@ -32,7 +32,7 @@ class GameScene(BaseScene): self.RED = (255, 0, 0) self.BLUE = (0, 0, 255) - def update(self): + def update(self, dt=0): if self.back_status: self.switch_to_scene("MainMenuScene") if self.Left_status and self.dirty_x >= 0: diff --git a/src/scenes/main_menu_scene.py b/src/scenes/main_menu_scene.py index 8bf854a..6a4766a 100644 --- a/src/scenes/main_menu_scene.py +++ b/src/scenes/main_menu_scene.py @@ -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.mouse_status = None self.mouse_last_status = None @@ -44,7 +44,7 @@ class MainMenuScene(BaseScene): # 鼠标位置 self.mouse_pos = (0, 0) - def update(self): + def update(self, dt=0): # 按键按下则切换场景 if self.button_status: self.switch_to_scene("GameScene") @@ -62,7 +62,7 @@ class MainMenuScene(BaseScene): self.handle_keyboard() # 雨滴坠落 - self.rain_fall() + self.rain_fall(dt) # 更新鼠标位置 self.mouse_pos = pygame.mouse.get_pos() @@ -216,12 +216,10 @@ class MainMenuScene(BaseScene): self.__rain_list_append(status) - def rain_fall(self): + def rain_fall(self, dt): """ 展示雨滴画面 """ - dt = self.clock.tick() - for rain in self.rain_list: # 当状态在区间1时绘制雨滴线条 diff --git a/start.py b/start.py index fea8357..33834f2 100644 --- a/start.py +++ b/start.py @@ -19,7 +19,7 @@ class Game: # 场景字典 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 @@ -27,6 +27,8 @@ class Game: def run(self): while self.running: + # 更新每帧时间 + dt = self.clock.tick() # 事件处理 for event in pygame.event.get(): # 这里已经获取了事件,事件队列被清空,在场景的update中再次获取将没有事件 if event.type == pygame.QUIT: @@ -37,13 +39,13 @@ class Game: if self.scene.next_scene is not None: if self.scene.next_scene in self.game_scenes.keys(): 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.scene.update() + self.scene.update(dt) # 当场景的下一场景为exit时退出游戏 if self.scene.next_scene == "exit": self.running = False @@ -52,4 +54,4 @@ class Game: pygame.display.update() if __name__ == "__main__": - Game() \ No newline at end of file + Game()