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