我一直在寻找并尝试解决这个问题几个小时。我有两个脚本,一个标记为main.py,另一个标记为menu.py.我试图使用main.py中的变量来控制menu.py的操作。该变量设置为最后一个键盘输入,在main.py脚本中,它执行它应该执行的操作。但是,当我尝试在menu.py中执行此操作时,没有任何反应,不会抛出错误,我尝试使用的原始动画也不会发生。我省略了部分代码,我认为这些部分不是问题的一部分,因此更容易阅读。
main.py代码:
#!/usr/bin/env python
WIDTH = 512
HEIGHT = 416
FPS = 20
VERSION = "0.0.3"
FULLSCREEN = False
import pygame,sys,os,time
pygame.init()
display = pygame.display.set_mode((WIDTH,HEIGHT), pygame.DOUBLEBUF)
alpha_display = display.convert_alpha()
fpsClock = pygame.time.Clock()
keyPressed = 0
sys.path.insert(0, "scripts/")
from pygame.locals import *
from media import *
import color
import menu
def run():
display.fill(color.BLACK)
if (menu.active == True):
menu.update()
else:
pass
while (True): # Code to run loop
for event in pygame.event.get():
if (event.type == QUIT):
pygame.quit()
sys.exit()
if (event.type == pygame.KEYDOWN):
time.sleep(0.1)
keyPressed = event.key
elif (event.type == pygame.KEYUP):
keyPressed = 0
run()
pygame.display.update()
fpsClock.tick(FPS)
menu.py代码:
from __main__ import *
page = "main"
selObj = 1
active = True
class o:
dee = False
def update():
if o.dee == False:
o.dee = True
global page
global selObj
global active
if page == "main": # Main menu
if (keyPressed == pygame.K_RETURN):
if (selObj == 1):
page = "singleplayer"
elif (selObj == 2):
pygame.quit()
sys.exit()
if (keyPressed == pygame.K_UP):
selObj -= 1
elif (keyPressed == pygame.K_DOWN):
selObj += 1
if (selObj >= 3):
selObj = 1
elif (selObj <= 0):
selObj = 2
if (selObj == 1):
print("test1"
elif (selObj == 2):
print("test2")
答案 0 :(得分:0)
我相信我找到了你的问题。您正在update()
函数中查找pygame事件(使用keypressed
),但您从未在pygame事件循环中调用该函数。我不知道你遗漏的行中的某个地方是否初始化keyPressed
,但是从我看到的你没有(这应该引发ValueError
异常)。如果您在menu.py文件中初始化keyPressed
,则不会将更改后的值从main.py传输到menu.py.我建议修复的方法是在事件循环中调用menu.update()
并将keyPressed
作为参数。
from __main__ import *
page = "main"
selObj = 1
active = True
class o:
dee = False
def update(keyPressed):#<----#
if o.dee == False:
o.dee = True
global page
global selObj
global active
if page == "main": # Main menu
if (keyPressed == pygame.K_RETURN):
...
并在主文件中:
...
def run():
display.fill(color.BLACK)
if (menu.active == True):
menu.update(keyPressed)#<-------#
else:
pass
while (True): # Code to run loop
for event in pygame.event.get():
if (event.type == QUIT):
pygame.quit()
sys.exit()
if (event.type == pygame.KEYDOWN):
time.sleep(0.1)
keyPressed = event.key
elif (event.type == pygame.KEYUP):
keyPressed = 0
menu.update(keyPressed)#<----#
run()
pygame.display.update()
fpsClock.tick(FPS)
...
您可能需要进一步修改代码,以确保每次鼠标移动时菜单都不会重置。 希望这有帮助。