首页 > 解决方案 > 我希望我的播放器在按下按钮时移动

问题描述

因此,当我只在一侧进行运动时,它可以工作,但是一旦我完成所有运动,它就不起作用了。我试图切换数字、命令,但没有用。我是一个初学者,我的技能不太好,因为我之前使用过教程。我想自己做一些事情,而不是使用教程,所以我决定问问题

import pygame
import sys
from pygame.locals import *

clock = pygame.time.Clock()

pygame.init()

pygame.display.set_caption("Neverout")
player = pygame.image.load("player.png")

green = (181, 231, 29)

WINDOW_SIZE = (800, 800)

screen = pygame.display.set_mode(WINDOW_SIZE, 0, 32)

player_pos = [385, 50]

up = False #So here I have my movement variables
down = False
right = False
left = False

while True:

    screen.blit(player, player_pos)

    #Here i check if my movement variable are true after I press them

    if left is True:
        player_pos[0] -= 5
    if right is True:
        player_pos[0] += 5
    if up is True:
        player_pos[1] -= 5
    if down is True:
        player_pos[1] += 5

    for event in pygame.event.get():
        #here i check if the button is pressed
        if event.type == KEYDOWN:
            if pygame.K_LEFT:
                left = True
            if pygame.K_RIGHT:
                right = True
            if pygame.K_UP:
                up = True
            if pygame.K_DOWN:
                down = True
        #Here I check if a button is not pressed
        if event.type == KEYUP:
            if pygame.K_LEFT:
                left = False
            if pygame.K_RIGHT:
                right = False
            if pygame.K_UP:
                up = False
            if pygame.K_DOWN:
                down = False
        #Checks for quiting the app
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    #No dates only updates
    pygame.display.update()
    screen.fill(green)
    clock.tick(60)

标签: python-3.xpygamegame-physicsatari-2600

解决方案


你的代码几乎是正确的,它只是错误地检查了事件。您需要检查event.key等于您检查的键码。

现有的代码只是说:

if pygame.K_LEFT:

但这pygame.K_LEFT只是一个数字,就像说if 27:永远为真一样。

只需event.key在其中添加即可修复它:

if event.key == pygame.K_LEFT:

Also don't forget to use elif (else if), as it's more efficient. If the key event is, say LEFT, it can't be RIGHT too, so there's no need to check any other codes. You can skip checking them with if .. elif.

Applying these fixes to your main loop makes the player move OK:

for event in pygame.event.get():
    #here i check if the button is pressed
    if event.type == KEYDOWN:
        if event.key == pygame.K_LEFT:
            left = True
        elif event.key == pygame.K_RIGHT:
            right = True
        elif event.key == pygame.K_UP:
            up = True
        elif event.key == pygame.K_DOWN:
            down = True
    #Here I check if a button is not pressed
    elif event.type == KEYUP:
        if event.key == pygame.K_LEFT:
            left = False
        elif event.key == pygame.K_RIGHT:
            right = False
        elif event.key == pygame.K_UP:
            up = False
        elif event.key == pygame.K_DOWN:
            down = False
    #Checks for quiting the app
    elif event.type == QUIT:
        pygame.quit()
        sys.exit()

推荐阅读