You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:12:02