pygame在wasd键绑定方面有问题

2024-10-03 13:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试做一个愚蠢的小乞丐游戏,我想有两个玩家,一个使用箭头键,一个使用wasd,箭头工作没有问题,但我不知道如何做wasd,我提前道歉,我是python的乞丐,我的名字是葡萄牙语的,所以在我发送代码之前,让我帮忙说我使用“jogador1”“jogador2”是指“player1”和“player2”

这是完整的代码

# jogo plataformer 1
import pygame
# começar o programa
pygame.init()
# ecrã
ecrã = pygame.display.set_mode((800, 600))
pygame.display.set_caption("Trump attack")
backgroundImg = pygame.image.load("weirdbackground.png")
def background():
    ecrã.blit(backgroundImg, (0, 0))
funcionar = True
# loop do jogo
# jogador1
jogadorImg =pygame.image.load("biden1.png")
jogadorX = 282
jogadorY = 58
jogadorX_mudar = 0
jogadorY_mudar = 0
# jogador2
jogador2Img = pygame.image.load("trump1.png")
jogador2X = 436
jogador2Y = 58
jogador2Y_mudar = 0
jogador2X_mudar = 0
# bala do jogador 1
balaImg = pygame.image.load("trump2.png")
balaX = jogadorX
balaY = int(jogadorY - 5)
balaY_mudar = 0
balaX_mudar = 0
bala_estado = "pronto"
def disparar(x, y):
    global bala_estado
    bala_estado = "fire"
    ecrã.blit(balaImg, (balaX, balaY))
def jogador2(x, y):
    ecrã.blit(jogador2Img, (x, y))
def jogador(x, y):
    ecrã.blit(jogadorImg, (x, y))
while funcionar:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            funcionar = False
    # keybinds jogador 1
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_LEFT:
            jogadorX_mudar = -1
        if event.key == pygame.K_RIGHT:
            jogadorX_mudar = 1
        if event.key == pygame.K_UP:
            jogadorY_mudar =-1
        if event.key == pygame.K_DOWN:
            jogadorY_mudar = 1
        if event.key == pygame.K_SPACE:
            disparar(balaX, balaY)
            print("hello")
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            jogadorX_mudar = 0
    if jogadorY < -30:
        jogadorY_mudar += 1
    if jogadorY == float(231.0):
        jogadorY_mudar *= 0
        jogadorY -= 1
    #keybinds jogador 2
    if event.type == pygame.KEYDOWN:
        if event.key == pygame.K_a:
            jogador2X_mudar = -1
        if event.key == pygame.K_d:
            jogador2X_mudar = 1
        if event.key == pygame.K_w:
            jogador2Y_mudar =-1
        if event.key == pygame.K_s:
            jogador2Y_mudar = 1
    if event.type == pygame.KEYUP:
        if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
            jogador2X_mudar = 0
    if jogador2Y < -30:
        jogador2Y_mudar += 1
    if jogador2Y == float(231.0):
        jogador2Y_mudar *= 0
        jogador2Y -= 1
    # bloco de cima jogador1
    if (jogadorY <=200 and jogadorY >= 45) and (jogadorX >= 227 and jogadorX <= 448):
        jogadorY_mudar *= 0
    if (jogadorY <= 45) and (jogadorX >= 448 or jogadorX <= 227):
        jogadorY_mudar += 1
    # bloco de cima jogador2
    if (jogador2Y <=200 and jogador2Y >= 45) and (jogador2X >= 227 and jogador2X <= 448):
        jogador2Y_mudar *= 0
    if (jogador2Y <= 45) and (jogador2X >= 448 or jogador2X <= 227):
        jogador2Y_mudar += 1
    if bala_estado == "fire":
        disparar(balaX, balaY)
        balaY += 1
    background()
    jogadorX += jogadorX_mudar
    jogadorY += jogadorY_mudar
    jogador2Y += jogador2Y_mudar
    jogador2X += jogador2X_mudar
    jogador2(jogador2X, jogador2Y)
    jogador(jogadorX, jogadorY)
    pygame.display.update()
    ```


Tags: andkeyeventifpygameecrbalajogador
1条回答
网友
1楼 · 发布于 2024-10-03 13:27:16

这是个问题。事件必须在事件循环中处理,而不是在事件循环之后

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

    # INDENTQTION
    # >|
        # keybinds jogador 1
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                jogadorX_mudar = -1
            if event.key == pygame.K_RIGHT:
                jogadorX_mudar = 1
            if event.key == pygame.K_UP:
                jogadorY_mudar =-1
            if event.key == pygame.K_DOWN:
                jogadorY_mudar = 1
            if event.key == pygame.K_SPACE:
                disparar(balaX, balaY)
                print("hello")
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                jogadorX_mudar = 0

    #[...]

相关问题 更多 >