Python 播放器输入函数调用
Python function call on player input
我在 python 和 pygame 中遇到问题。我想在用户进行特定输入后 "jump to" 一个函数(在这种情况下,当按下向上箭头键时),然后在该函数(start1)中我再次回调到 main() 并当再次按下 "up arrow key" 时,我想进入 start()
当我 运行 我得到这个程序时:
递归错误:超过最大递归深度
有什么建议吗?
代码如下:
def main(text, func):
exit = False
while not exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
func
if event.key == pygame.K_DOWN:
pygame.quit()
quit()
screen.fill(black)
text = str(text)
font = pygame.font.SysFont('georgia', 16)
message = font.render(text, True, white)
screen.blit(message, (screen_width / 2, screen_height / 2))
pygame.display.flip()
clock.tick(30)
def start():
main("Hello, press key-up to get to start 1!", start1())
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start())
start()
您没有将 start1
和 start
函数传递给 main
,而是 调用 它们 before main 甚至被调用了。
def start():
main("Hello, press key-up to get to start 1!", start1())
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start())
start
调用start1
,在每个例程中计算main
的参数时调用start
。 main
没有机会被调用:首先发生无限乒乓递归。
更改为:
def start():
main("Hello, press key-up to get to start 1!", start1)
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start)
并在 main
中将 func
替换为 func()
代码中的 在此处调用 您的函数:
if event.key == pygame.K_UP:
func()
与其从跳跃的角度思考,不如尝试从状态的角度思考。状态机是非常典型的游戏开发工具
您有(至少)3 个状态:"up not pressed"、"up pressed once"、"up pressed twice in a row"。
将此状态存储在一个变量中,在按键时更新它。然后当按下 Up 时,您可以很容易地知道是否要调用 start()
。
我在 python 和 pygame 中遇到问题。我想在用户进行特定输入后 "jump to" 一个函数(在这种情况下,当按下向上箭头键时),然后在该函数(start1)中我再次回调到 main() 并当再次按下 "up arrow key" 时,我想进入 start()
当我 运行 我得到这个程序时:
递归错误:超过最大递归深度
有什么建议吗?
代码如下:
def main(text, func):
exit = False
while not exit:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
func
if event.key == pygame.K_DOWN:
pygame.quit()
quit()
screen.fill(black)
text = str(text)
font = pygame.font.SysFont('georgia', 16)
message = font.render(text, True, white)
screen.blit(message, (screen_width / 2, screen_height / 2))
pygame.display.flip()
clock.tick(30)
def start():
main("Hello, press key-up to get to start 1!", start1())
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start())
start()
您没有将 start1
和 start
函数传递给 main
,而是 调用 它们 before main 甚至被调用了。
def start():
main("Hello, press key-up to get to start 1!", start1())
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start())
start
调用start1
,在每个例程中计算main
的参数时调用start
。 main
没有机会被调用:首先发生无限乒乓递归。
更改为:
def start():
main("Hello, press key-up to get to start 1!", start1)
def start1():
os.system('cls')
main("Good, Back to start on Key-up", start)
并在 main
中将 func
替换为 func()
代码中的 在此处调用 您的函数:
if event.key == pygame.K_UP:
func()
与其从跳跃的角度思考,不如尝试从状态的角度思考。状态机是非常典型的游戏开发工具
您有(至少)3 个状态:"up not pressed"、"up pressed once"、"up pressed twice in a row"。
将此状态存储在一个变量中,在按键时更新它。然后当按下 Up 时,您可以很容易地知道是否要调用 start()
。