【问题标题】:pygame having trouble with wasd keybindingpygame 在使用 wasd 键绑定时遇到问题
【发布时间】:2021-10-05 21:32:18
【问题描述】:

尝试做一个愚蠢的小初学者游戏,我想有两个玩家,一个使用箭头键,一个使用 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()
    ```

【问题讨论】:

  • 是的,但即使将 K_a 用于左侧或 K_d 用于右侧等,由于某种原因它也不起作用。
  • 这很奇怪,你有没有试过在那些按键上打印一些东西,看看问题是按键注册还是其他问题?
  • 是的,我发送的这段代码我什至保留在 k_a 上的打印命令中,令我震惊的是“jogador1”又名 player1 可以使用箭头键,但完全相同的复制粘贴代码更改为“jogador2”,K_a 和 K_d 等未打印或移动。如果有任何帮助,我可以发送整个代码。
  • 你能把完整的代码贴出来试试吗?

标签: python pygame


【解决方案1】:

这是Indentation 的问题。事件必须事件循环中处理,而不是事件循环之后处理:

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

    #[...]

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2012-09-02
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多