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

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
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):
"""
场景的每帧更新逻辑
"""
+3 -3
View File
@@ -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):
"""
场景每帧更新逻辑
"""
+3 -3
View File
@@ -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:
+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.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时绘制雨滴线条
+6 -4
View File
@@ -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()
Game()