如何从另一个脚本更新 pygame window?
How can I update pygame window from another script?
import pygame
import sys
pygame.init()
win = pygame.display.set_mode((400, 140))
font = pygame.font.SysFont('Arial', 50)
def getKey(keyInput):
if keyInput[119]: # W
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(70, 5, 60, 60))
win.blit(font.render('W', True, (0, 0, 0)), (80, 10))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(70, 5, 60, 60))
win.blit(font.render('W', True, (0, 0, 0)), (80, 10))
if keyInput[97]: # A
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(5, 70, 60, 60))
win.blit(font.render('A', True, (0, 0, 0)), (20, 70))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(5, 70, 60, 60))
win.blit(font.render('A', True, (0, 0, 0)), (20, 70))
if keyInput[115]: # S
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(70, 70, 60, 60))
win.blit(font.render('S', True, (0, 0, 0)), (85, 70))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(70, 70, 60, 60))
win.blit(font.render('S', True, (0, 0, 0)), (85, 70))
if keyInput[100]: # D
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(135, 70, 60, 60))
win.blit(font.render('D', True, (0, 0, 0)), (150, 70))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(135, 70, 60, 60))
win.blit(font.render('D', True, (0, 0, 0)), (150, 70))
if keyInput[1073741906]: # UP
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(270, 5, 60, 60))
win.blit(font.render('▲', True, (0, 0, 0)), (282, 5))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(270, 5, 60, 60))
win.blit(font.render('▲', True, (0, 0, 0)), (282, 5))
if keyInput[1073741904]: # LEFT
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(205, 70, 60, 60))
win.blit(font.render('◄', True, (0, 0, 0)), (208, 73))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(205, 70, 60, 60))
win.blit(font.render('◄', True, (0, 0, 0)), (208, 73))
if keyInput[1073741905]: # DOWN
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(270, 70, 60, 60))
win.blit(font.render('▼', True, (0, 0, 0)), (282, 73))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(270, 70, 60, 60))
win.blit(font.render('▼', True, (0, 0, 0)), (282, 73))
if keyInput[1073741903]: # RIGHT
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(335, 70, 60, 60))
win.blit(font.render('►', True, (0, 0, 0)), (350, 73))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(335, 70, 60, 60))
win.blit(font.render('►', True, (0, 0, 0)), (350, 73))
pygame.display.update()
keyList = [97, 100, 115, 119, 1073741904, 1073741906, 1073741905, 1073741903]
reset = True
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keyInput = pygame.key.get_pressed()
flag = [True if keyInput[i] == 1 else False for i in keyList]
if True in flag:
reset = True
getKey(keyInput)
else:
if reset:
getKey(keyInput)
reset = False
else:
pass
我想将“getKey”函数从我的脚本中分离出来,并从另一个脚本中使用它。实际上我可以将它分开,但我不知道如何使用此 getKey 函数从另一个脚本更新 pygame window 。我该怎么办?
例如:
main.py--
import pygame
import sys
import getKeyFunction
pygame.init()
win = pygame.display.set_mode((400, 140))
keyList = [97, 100, 115, 119, 1073741904, 1073741906, 1073741905, 1073741903]
reset = True
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keyInput = pygame.key.get_pressed()
flag = [True if keyInput[i] == 1 else False for i in keyList]
if True in flag:
reset = True
getKey(keyInput)
else:
if reset:
getKey(keyInput)
reset = False
else:
pass
Main.py 刚开始 pygame window 但是其他包含 getKey 函数的脚本更新了这个 window.
您需要将 win
传递给 getKey
函数:
def getKey(win, keyInput):
# [...]
while True:
# [...]
if True in flag:
reset = True
getKey(win, keyInput)
# [...]
import pygame
import sys
pygame.init()
win = pygame.display.set_mode((400, 140))
font = pygame.font.SysFont('Arial', 50)
def getKey(keyInput):
if keyInput[119]: # W
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(70, 5, 60, 60))
win.blit(font.render('W', True, (0, 0, 0)), (80, 10))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(70, 5, 60, 60))
win.blit(font.render('W', True, (0, 0, 0)), (80, 10))
if keyInput[97]: # A
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(5, 70, 60, 60))
win.blit(font.render('A', True, (0, 0, 0)), (20, 70))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(5, 70, 60, 60))
win.blit(font.render('A', True, (0, 0, 0)), (20, 70))
if keyInput[115]: # S
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(70, 70, 60, 60))
win.blit(font.render('S', True, (0, 0, 0)), (85, 70))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(70, 70, 60, 60))
win.blit(font.render('S', True, (0, 0, 0)), (85, 70))
if keyInput[100]: # D
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(135, 70, 60, 60))
win.blit(font.render('D', True, (0, 0, 0)), (150, 70))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(135, 70, 60, 60))
win.blit(font.render('D', True, (0, 0, 0)), (150, 70))
if keyInput[1073741906]: # UP
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(270, 5, 60, 60))
win.blit(font.render('▲', True, (0, 0, 0)), (282, 5))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(270, 5, 60, 60))
win.blit(font.render('▲', True, (0, 0, 0)), (282, 5))
if keyInput[1073741904]: # LEFT
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(205, 70, 60, 60))
win.blit(font.render('◄', True, (0, 0, 0)), (208, 73))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(205, 70, 60, 60))
win.blit(font.render('◄', True, (0, 0, 0)), (208, 73))
if keyInput[1073741905]: # DOWN
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(270, 70, 60, 60))
win.blit(font.render('▼', True, (0, 0, 0)), (282, 73))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(270, 70, 60, 60))
win.blit(font.render('▼', True, (0, 0, 0)), (282, 73))
if keyInput[1073741903]: # RIGHT
pygame.draw.rect(win, [220, 30, 30], pygame.Rect(335, 70, 60, 60))
win.blit(font.render('►', True, (0, 0, 0)), (350, 73))
else:
pygame.draw.rect(win, [255, 100, 0], pygame.Rect(335, 70, 60, 60))
win.blit(font.render('►', True, (0, 0, 0)), (350, 73))
pygame.display.update()
keyList = [97, 100, 115, 119, 1073741904, 1073741906, 1073741905, 1073741903]
reset = True
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keyInput = pygame.key.get_pressed()
flag = [True if keyInput[i] == 1 else False for i in keyList]
if True in flag:
reset = True
getKey(keyInput)
else:
if reset:
getKey(keyInput)
reset = False
else:
pass
我想将“getKey”函数从我的脚本中分离出来,并从另一个脚本中使用它。实际上我可以将它分开,但我不知道如何使用此 getKey 函数从另一个脚本更新 pygame window 。我该怎么办?
例如:
main.py--
import pygame
import sys
import getKeyFunction
pygame.init()
win = pygame.display.set_mode((400, 140))
keyList = [97, 100, 115, 119, 1073741904, 1073741906, 1073741905, 1073741903]
reset = True
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keyInput = pygame.key.get_pressed()
flag = [True if keyInput[i] == 1 else False for i in keyList]
if True in flag:
reset = True
getKey(keyInput)
else:
if reset:
getKey(keyInput)
reset = False
else:
pass
Main.py 刚开始 pygame window 但是其他包含 getKey 函数的脚本更新了这个 window.
您需要将 win
传递给 getKey
函数:
def getKey(win, keyInput):
# [...]
while True:
# [...]
if True in flag:
reset = True
getKey(win, keyInput)
# [...]