使用 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()
)。
大家新年快乐。
我在使用 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()
)。