我想运行带有事件的 if 语句,这些语句也使用键盘输入来决定,并放置在函数中,但它不起作用

I want to run if statements with events, that also use keyboard inputs to decide, and are placed inside a function but it don't work

提问人:GGengar 提问时间:10/7/2023 最后编辑:GGengar 更新时间:11/24/2023 访问量:79

问:

我正在尝试使用 pygame 制作游戏,我想使用包含事件的函数,但是当我调用函数时,函数内包含事件的 if 语句不起作用

代码是这样的

def tryy():
    print("this one will print")

    # I want these two to be able to run
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_2:
            print("but this won't")
        if event.key == pygame.K_3:
            print("this don't work too")
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.KEYDOWN:
            # I want it so that after 1 is press you can run the events inside the function "tryy" when the right key input is press for those events
            if event.key == pygame.K_1:
               tryy()

        pygame.display.update()
        
pygame.quit()

我期望当我选择“1”时,例如,将作为战斗选项,然后调用函数“tryy”为您提供两个选项(两种不同的攻击),但它不起作用。

谁能帮我解决这个问题,谢谢

python 函数 if 语句 pygame

评论

0赞 GGengar 10/7/2023
“重复问题”甚至与我原来的问题都不一样。为什么我的问题甚至被设置为重复??...
0赞 GGengar 10/7/2023
“重复问题”是关于“如何在pygame中获取键盘输入?”,我的与此不同。我只是想知道为什么当我调用函数时,我的函数中的事件不起作用。
0赞 Rabbid76 10/7/2023
您不能在事件中处理事件。请参阅如何在pygame中获取键盘输入?

答:

0赞 Rabbid76 10/7/2023 #1

您必须在事件循环中调用,但在另一个事件的条件下不能调用。如果要确定在按下“1”后是否按下了“2”或“3”,则必须添加一个变量,指示按下了“1”。您还必须将事件对象传递给函数:tryy

def tryy(event):
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_2:
            print("2")
        if event.key == pygame.K_3:
            print("3")

pressed_1 = False

run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if pressed_1:
            tryy(event)

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_1:
                pressed_1 = True
            else:
                pressed_1 = False
             
-1赞 N0bita 10/10/2023 #2

if 语句有效,但未在函数中再次获取事件,因此 设置为 并且条件检查在 if 语句处失败。event.keypygame.K_1

import pygame
pygame.init()

win = pygame.display.set_mode((500, 500))
pygame.display.set_caption("First Game")

def tryy():
    print("this one will print")
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_1:
            print("this will print")
        if event.key == pygame.K_2:
            print("but this won't")
        if event.key == pygame.K_3:
            print("this don't work too")
run = True
while run:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_1:
               tryy()

        pygame.display.update()
        
pygame.quit()

如果你想在函数中有一个新事件,