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
相关产品推荐
相关产品推荐

