微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按键未在Python / Pygame中注册?

如何解决按键未在Python / Pygame中注册?

我是Python的新手,尤其是Pygame的新手。一直在尝试开发一种基本的太空入侵者类型的游戏,以尝试了解有关Pygame的更多信息,但是我无法弄清楚移动用户飞船的代码。看了一些有关它的教程,我认为我的代码看起来不错,但是我可能正在寻找一些东西。我使用的是python版本3.8和Pygame版本1.9.6。

'''
This script is creating a space invader type game with the Pygame module.

Tutorial following YT video from  freecodecamp.org
(https://www.youtube.com/watch?v=FfWpgLFMI7w&ab_channel=freeCodeCamp.org)
'''

import sys
import pygame

# Initializing Pygame
# (ALWAYS required)
pygame.init()

# Screen Dimensions
width = 800
height = 600
screen = pygame.display.set_mode((width,height))

# Other Game Settings
framerate = pygame.time.Clock()
framerate.tick(60)

# Setting Title and Images
pygame.display.set_caption('Space Invaders')
icon = pygame.image.load('spaceship.png')
pygame.display.set_icon(icon)
player_ship =  pygame.image.load('space-invaders.png')

def player(x,y):
    '''
    Draws the player's ship on the screen at (x,y) coordinates.
    '''
    screen.blit(player_ship,(x,y))

# Game Function
def game():
    '''
    Actual code for the game itself.
    '''
    # Sets the starting position for the player's ship
    playerX = 368 # Middle of Screen (on x-axis)
    playerY = 506 # 30px off bottom of the screen (y-axis)

    x_change = 0

    # Game Loop
    game_exit = False
    while not game_exit:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_exit = True
            elif event.type == pygame.KEYDOWN:
                if event.type == pygame.K_ESCAPE:
                    game_exit = True
                elif event.type == pygame.K_d:
                    x_change = 5
                elif event.type == pygame.K_a:
                    x_change = -5
            elif event.type == pygame.KEYUP:
                if event.key == pygame.K_d or event.key == pygame.K_a:
                    x_change = 0

            playerX += x_change

            print(x_change) # Using this to see if the script is recognizing the user keystrokes

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

        player(playerX,playerY)

        # Screen Update
        # (ALWAYS required)
        pygame.display.update()

game()

pygame.quit()
sys.exit()

感谢您的帮助!

解决方法

问题是您要检查event.type中的pygame.K_d,等等。

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_exit = True
        elif event.type == pygame.KEYDOWN:
            if event.type == pygame.K_ESCAPE:      # <-- HERE
                game_exit = True
            elif event.type == pygame.K_d:         # <-- HERE
                x_change = 5
            elif event.type == pygame.K_a:         # <-- AND HERE
                x_change = -5

event.type不能同时等于 pygame.KEYDOWNpygame.K_d!如果您检查documentation on event,请注意,密钥代码是在event.key中发送的,因此这是一个简单的解决方法。

KEYDOWN键,mod,unicode,scancode
KEYUP键,修改

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_exit = True
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE:      # <-- FIX HERE
                game_exit = True
            elif event.key == pygame.K_d:         # <-- FIX HERE
                x_change = 5
            elif event.key == pygame.K_a:         # <-- AND FIX HERE
                x_change = -5

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。