美文网首页
把pygame 做成 flask 的样子

把pygame 做成 flask 的样子

作者: 圣_狒司机 | 来源:发表于2023-04-19 15:28 被阅读0次

    一、事件路由

    flask的机制是实例化事件轮询函数,然后向主函数注册路由视图的方式实现路由响应。

    使用flask轮询函数只需要实例化Flask类,再app.run就可以了。app是库自带的,用户要做的只剩往路由表里添加视图函数。

    pygame的内部机制是单事件循环,可以模仿flask注册事件类。先实例化一个自己的route类,往这个route类里封装事件表,对应flask 的路由表,再封装事件索引装饰器。

    class Route:
        def __init__(self):
            self.lib = {}
        def __repr__(self):
            return f"{self.lib=}"
        def __call__(self,routepath):
            def warpper(func):
                self.lib[routepath] = func
                @wraps
                def inner_wrapped(*args):
                    return func(*args)
                return inner_wrapped
            return warpper
    

    二、游戏类

    在游戏类的init函数中封装route事件表

    class Game:
        def __init__(self):
            pygame.init()
            self.route = Route()
            self.clock = pygame.time.Clock()
    
        def run(self):
            self.screen = pygame.display.set_mode((400,300))
            print(self.route.lib)
            while 1:
                for event in pygame.event.get():
                    if event.type in self.route.lib:
                        self.route.lib[event.type](event)
            self.screen.fill((0,0,0))
            pygame.display.flip()
            self.clock.tick(20)
    

    三、注册事件函数

    把以上两个类写进 lib.py 中,导入库:

    import pygame,sys
    from functools import wraps
    

    写入口主函数和事件注册函数:

    import pygame,sys
    from pygame.locals import *
    from lib import Game
    
    game = Game()
    
    @game.route(QUIT)
    def exit(e):
        pygame.quit()
        sys.exit()
    
    @game.route(KEYDOWN)
    def keydown(e):
        print(e)
    
    @game.route(MOUSEMOTION)
    def mousemottion(e):
        print(e)
    
    @game.route(MOUSEBUTTONDOWN)
    def mousebuttondown(e):
        print(e)
    
    game.run()
    
    

    相关文章

      网友评论

          本文标题:把pygame 做成 flask 的样子

          本文链接:https://www.haomeiwen.com/subject/ctdljdtx.html