如何用Python实现类似Unity的游戏相关功能?基于Pygame开发自定义游戏引擎
基于Pygame实现类Unity生命周期的最简方案
核心逻辑是封装基础组件基类,再通过引擎主循环统一管理所有组件的生命周期调用即可,不需要复杂的额外依赖。
1. 定义基础组件基类
所有自定义游戏脚本都继承该基类,按需重写start和update方法:
import pygame class BaseComponent: def start(self): # 子类重写后,会在脚本注册时执行1次 pass def update(self): # 子类重写后,会在每帧刷新时自动执行 pass
2. 封装引擎核心管理类
负责初始化Pygame环境、注册组件、运行主循环,统一调度生命周期方法:
class GameEngine: def __init__(self, screen_width=800, screen_height=600, fps=60): pygame.init() self.screen = pygame.display.set_mode((screen_width, screen_height)) self.clock = pygame.time.Clock() self.fps = fps self.running = True # 存储所有已注册的游戏组件 self.components = [] def add_component(self, component: BaseComponent): # 注册组件时立即调用start方法 component.start() self.components.append(component) def run(self): # 主循环入口 while self.running: # 处理全局事件 for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False # 清空上一帧画面 self.screen.fill((0, 0, 0)) # 批量调用所有组件的update方法 for comp in self.components: comp.update() # 刷新画面+控制帧率 pygame.display.flip() self.clock.tick(self.fps) pygame.quit()
3. 使用示例
# 自定义玩家控制脚本,继承BaseComponent class PlayerController(BaseComponent): def start(self): self.position = [400, 300] self.move_speed = 3 print("玩家脚本初始化完成,start方法已执行") def update(self): # 每帧检测按键控制移动 keys = pygame.key.get_pressed() if keys[pygame.K_w]: self.position[1] -= self.move_speed if keys[pygame.K_s]: self.position[1] += self.move_speed if keys[pygame.K_a]: self.position[0] -= self.move_speed if keys[pygame.K_d]: self.position[0] += self.move_speed # 绘制玩家圆点 pygame.draw.circle(engine.screen, (255, 0, 0), self.position, 20) if __name__ == "__main__": # 初始化引擎 engine = GameEngine() # 注册自定义脚本,自动执行start engine.add_component(PlayerController()) # 启动主循环,每帧自动执行所有脚本的update engine.run()
如果需要拓展更多生命周期方法,比如固定物理帧执行的fixed_update、组件销毁时执行的on_destroy,只需要在基类里添加对应空方法,再在引擎主循环的对应位置添加批量调用逻辑即可。
内容的提问来源于stack exchange,提问作者Love Lindeborg
相关产品推荐
相关产品推荐

