简体   繁体   English

为什么没有 event.type == pygame.KEYDOWN 工作

[英]why isnt event.type == pygame.KEYDOWN working

alright so I have been trying to start learning game development in the past couple days and I finally started working on a project.好吧,过去几天我一直在尝试开始学习游戏开发,最后我开始研究一个项目。 The problem is that for some reason my controls aren't working even when I made everything like it is supposed to be.问题是,由于某种原因,即使我按照应有的方式进行了所有操作,我的控件也无法正常工作。 Please help.请帮忙。 (also this is the entire code because I dont know where I am wrong) (这也是整个代码,因为我不知道我错在哪里)

#instalize the game VERY IMPORTANT
pygame.init()

# this is the window
screen = pygame.display.set_mode((800, 600))
#title and icon
pygame.display.set_caption("Space invaders")
icon = pygame.image.load('pictures/ufo.png')
pygame.display.set_icon(icon)

#player
playerImg = pygame.image.load('pictures/player.png')
playerX = 370
playerY = 480
PlayerX_change = 0


def player(x,y):
    screen.blit(playerImg, (x,y))


#game loop
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running= False

                # if keystroke is pressed move right or left
            if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        playerX_change = -0.1
                    if event.key == pygame.K_RIGHT:
                        playerX_change = 0.1
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                    playerX_change = 0.1





    #RGB
    screen.fill((0, 0, 0))

    playerX += PlayerX_change
    player(playerX, playerY)
    pygame.display.update()

It is a matter of Indentation .这是一个缩进的问题。 You cannot nest events:您不能嵌套事件:

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

        # INDENTATION
        #<--|

        # if keystroke is pressed move right or left
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -0.1
            if event.key == pygame.K_RIGHT:
                playerX_change = 0.1
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0.1

    # [...]

Your identation is not correct.你的识别不正确。 I have corrected it and attached the code.我已更正并附上了代码。

#instalize the game VERY IMPORTANT
pygame.init()

# this is the window
screen = pygame.display.set_mode((800, 600))
#title and icon
pygame.display.set_caption("Space invaders")
icon = pygame.image.load('pictures/ufo.png')
pygame.display.set_icon(icon)

#player
playerImg = pygame.image.load('pictures/player.png')
playerX = 370
playerY = 480
PlayerX_change = 0


def player(x,y):
    screen.blit(playerImg, (x,y))


#game loop
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running= False

        # if keystroke is pressed move right or left
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                playerX_change = -0.1
            if event.key == pygame.K_RIGHT:
                playerX_change = 0.1
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                playerX_change = 0.1


    #RGB
    screen.fill((0, 0, 0))

    playerX += PlayerX_change
    player(playerX, playerY)
    pygame.display.update()

Your indentation is incorrect你的缩进不正确

Try usinng this;尝试使用这个;

    if event.type == pygame.QUIT:
        running= False

    # if keystroke is pressed move right or left
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            playerX_change = -0.1
        if event.key == pygame.K_RIGHT:
            playerX_change = 0.1
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            playerX_change = 0.1

Also if you use event.KEYDOWN it not checks multiple keys although you can use pygame.key.get_pressed()此外,如果您使用 event.KEYDOWN 它不会检查多个键,尽管您可以使用 pygame.key.get_pressed()

Use:利用:

keys = pygame.key.get_pressed()
if keys[pygame.K_UP]:
   code:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM