有我的代码:
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
但它根本不起作用。
有人可以帮助我吗?
答案 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事件的重复次数。但是,我认为在各种事件上设置标志是最好的解决方案,然后检查关键状态作为第二个最佳选择。