使用 Pygame 的 2 个过程之间的接口

Using Interface between 2 procedures with Pygame

大家新年快乐。

我在使用 Pygame 时遇到了一些小问题,我想知道你是否可以帮我解决它。

事情是这样的:我的练习包含一个我们需要用 pygame 重现并将其分配为过程的接口。

接下来,我们需要在另一个程序中使用创建的接口,而不是在第二个程序中将其作为参数。

问题是将接口指定为全局接口根本不起作用,我发现让它起作用的唯一方法是 return 来自第一个过程的接口(它不再是一个过程所以) 并将其用作第二个过程的参数。

基本上,这不是我练习中要求的,所以我应该找到其他方法来完成。

我的代码是这样的:

def creating():
    a = 0
    pygame.init()

    red = (255,0,0)
    mySurface = pygame.display.set_mode((400,250))
    while a == 0:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

        pygame.draw.rect(mySurface,red,(35,23,48,64),0)
        pygame.display.update()


def otherprocedure():
    a = 0
    blue = (0,0,255)
    while a == 0:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
        pygame.draw.rect(mySurface,blue,(100,100,20,20),0) #I want this to appear on mySurface but it does not even if mySurface is a global variable
        pygame.display.update()

creating()
otherprocedure()

在此先感谢您的帮助。

您的蓝色矩形永远不会被绘制,因为当第一个函数收到 QUIT 事件时您正在退出程序(使用 sys.exit())。现在代码的方式,mySurface 是否是全局的并不重要,因为第二个函数永远不会 运行s。要使其工作,您需要将第一个事件循环的行为更改为中断而不退出。然后,您可以解决将表面从一个函数传递到另一个函数的问题(例如,通过将其设为 global 变量)。

试试这个:

def creating():
    global mySurface                # make mySurface a global variable

    a = 0
    pygame.init()

    red = (255,0,0)
    mySurface = pygame.display.set_mode((400,250))
    while a == 0:
        for event in pygame.event.get():
            if event.type == QUIT:
                a = 1               # this will stop the loop without ending the program

        pygame.draw.rect(mySurface,red,(35,23,48,64),0)
        pygame.display.update()


def otherprocedure():
    a = 0
    blue = (0,0,255)
    while a == 0:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
        pygame.draw.rect(mySurface,blue,(100,100,20,20),0)     # this will just work now
        pygame.display.update()

creating()
otherprocedure()

如果在第二个函数之后还有更多的东西要 运行,您可能想要从那里也删除 pygame.quit()sys.exit() 调用,并让它 return 控制调用代码(您可能希望在某些时候调用 pygame.quit())。