Python 使用Pygame的两个过程之间的接口

Python 使用Pygame的两个过程之间的接口,python,pygame,Python,Pygame,祝大家新年快乐 我对Pygame有一个小问题,我想知道你是否能帮我解决它 事情是这样的:我的练习包含在一个我们需要用pygame复制的界面中,并将其指定为一个过程 接下来,我们需要在另一个过程中使用创建的接口,而不在第二个过程中将其作为参数 问题是,将接口指定为全局接口根本不起作用,我发现使其起作用的唯一方法是从第一个过程返回接口,而第一个过程不再是过程,因此将其用作第二个过程的参数 基本上,这不是我练习中所要求的,所以我应该找到另一种方法 我的代码是这样的: def creating():

祝大家新年快乐

我对Pygame有一个小问题,我想知道你是否能帮我解决它

事情是这样的:我的练习包含在一个我们需要用pygame复制的界面中,并将其指定为一个过程

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

问题是,将接口指定为全局接口根本不起作用,我发现使其起作用的唯一方法是从第一个过程返回接口,而第一个过程不再是过程,因此将其用作第二个过程的参数

基本上,这不是我练习中所要求的,所以我应该找到另一种方法

我的代码是这样的:

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()

提前感谢您的帮助。

在第一个函数中收到退出事件时,您将使用sys.exit退出程序,因此不会绘制蓝色矩形。按照现在的代码方式,mySurface是否为全局函数并不重要,因为第二个函数从未运行过。要使其工作,您需要将第一个事件循环的行为更改为在不退出的情况下中断。然后,您可以解决将曲面从一个函数传递到另一个函数的问题,例如,将其设置为全局变量

试试这个:

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调用,并让它将控制权返回到调用代码,您可能希望在某个时候调用pygame.quit。

mySurface就是您所说的界面吗?将其设置为全局变量,并在第一个函数中为其赋值,然后在第二个函数中引用其值,应该可以正常工作。我也不确定你所说的将其指定为一个过程是什么意思。是的。我上一次试过,把:global mySurface放在第一个函数中。但是我应该在第二个函数中放什么呢?我什么也没放进去,也没用。我认为,一旦它在代码中的任何地方被引用,我们就不必在其他地方引用它了?您还需要在第二个函数中添加一个全局mySurface。如果您在模块级的两个函数之外都有一个mySurface=None之类的东西,那么这就没有必要了。仍然不起作用。我尝试了两种解决方案。。。看起来第二个函数只能使用创建的接口,如果它是一个参数…这两个函数在单独的.py文件中吗?谢谢!我不认为sys.exit是这样工作的,所以现在,你让我的大脑明白了:问题解决了!