修复每帧时间在场景中更新造成的雨滴状态没有随机分布的问题
This commit is contained in:
1 parent
b864a5e82e
commit
75a8525985
5 files changed
+18
-19
No files matched your search
@@ -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):
|
||||
"""
|
||||
场景的每帧更新逻辑
|
||||
"""
|
||||
|
||||
@@ -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):
|
||||
"""
|
||||
场景每帧更新逻辑
|
||||
"""
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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时绘制雨滴线条
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user