python 3.2:pygame.KEYDOWN只工作一次?

时间:2017-04-16 00:04:32

标签: python python-3.x pygame

有我的代码:

import pygame, sys, os
from pygame.locals import *
from time import sleep
import os

path = os.getcwd()
os.chdir(path + '\Assets')

pygame.init()

FPS = 30
fpsClock = pygame.time.Clock()

DISPLAYSURF = pygame.display.set_mode((800, 500))
pygame.display.set_caption('fightR')

WHITE = (225, 225, 225)
SILVER = (192, 192, 192)
BGCOLOR = SILVER
fkx = 70
fky = 252
SPEED = 5
jump = False

#loading images
fighter_kungfu_1 = pygame.image.load('fighter_kungfu_1.png')
fighter_kungfu_jump = pygame.image.load('fighter_kungfu_jump.png')

def CheckForQuit() :
    for event in pygame.event.get():
       if event.type == QUIT:
          pygame.quit()
          sys.exit()

#MGL
while True:

    DISPLAYSURF.fill(BGCOLOR)

    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN and event.key == pygame.K_a:
            if (fkx > 2):        
                 global fkx
                 fkx = fkx - SPEED
        elif event.type == pygame.KEYDOWN and event.key == pygame.K_d:
            if (fkx < 300):
                global fkx
                fkx = fkx + SPEED
    elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
        jump = True

if (jump):
    DISPLAYSURF.blit(fighter_kungfu_jump, (fkx - 25, fky - 10))
    #sleep(0.5)
else:
    DISPLAYSURF.blit(fighter_kungfu_1, (fkx, fky))

jump = False

CheckForQuit()

pygame.display.update()
fpsClock.tick(FPS)
pygame.display.flip()

如果您需要,可以链接到图像:
https://drive.google.com/open?id=0B4Aq1fJx1P4AQkE1ZTZLR1ZCRW8
https://drive.google.com/open?id=0B4Aq1fJx1P4AeXB5UjYtZ29XU1k
(将它们放在&#39;资产&#39;文件夹中)

我对游戏的问题:当我按下&#39; a&#39;或者&#39; d&#39;按住并按住它,我的角色只移动一次而不是连续移动。

我试图放一个&#34;而#34;循环而不是&#34;如果&#34;和&#34; elif&#34;:

while event.type == pygame.KEYDOWN and event.key == pygame.K_a:
    if (fkx > 2):
         global fkx
         fkx = fkx - SPEED
while event.type == pygame.KEYDOWN and event.key == pygame.K_d:
    if (fkx < 300):
         global fkx
         fkx = fkx + SPEED

但它根本不起作用。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

默认情况下,pygame.KEYDOWN事件仅在键从未按下移动到按下时发生,您只执行一次。

如果要跟踪按下哪些键,可以在收到keydown事件时设置一个标志,然后在收到keyup事件时取消设置。

或者,您可以使用get_pressed函数(https://www.pygame.org/docs/ref/key.html#pygame.key.get_pressed)来获取键盘键的当前状态。

您还可以查看如何使用https://www.pygame.org/docs/ref/key.html#pygame.key.set_repeat设置keydown事件的重复次数。但是,我认为在各种事件上设置标志是最好的解决方案,然后检查关键状态作为第二个最佳选择。