You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pygame双人小游戏WASD按键绑定无响应问题求助

问题根因
  • 事件处理逻辑缩进错误:所有按键事件(KEYDOWN/KEYUP)的判断代码放在了for event in pygame.event.get()循环外部,只有事件队列的最后一个事件会被识别,绝大多数按键事件直接被丢弃,方向键能正常触发属于巧合。
  • 2号玩家按键释放逻辑写错:当前2号玩家的KEYUP判断条件仍然沿用了1号玩家的左右方向键,WASD按下后没有对应的释放逻辑,同时也无法正确响应按键状态变更。
修正代码

你只需要把按键判断逻辑缩进放入事件循环,同时修改2号玩家的释放判断条件即可,完整修正代码如下:

# 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
        #keybinds jogador 2 移入事件循环内,同时修改KEYUP判断条件
        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_a or event.key == pygame.K_d:
                jogador2X_mudar = 0
    if jogadorY < -30:
        jogadorY_mudar += 1
    if jogadorY == float(231.0):
        jogadorY_mudar *= 0
        jogadorY -= 1
    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()

内容的提问来源于stack exchange,提问作者Extremegamer Memes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 07:45:00