[英]pygame keyup not registering correctly
我做了一個只檢測 2 名玩家的動作的游戲,但有時,當同時按下多個鍵然后松開時,它並沒有檢測到所有鍵都已松開(其中一個鍵仍然算作按下)。我嘗試在程序中多次調用“keyup”function,但它似乎沒有幫助。它也只發生在一個玩家身上,但由於一次按下的鍵較少,所以很少發生。 這是代碼:
import pygame,sys
pygame.init()
DPROZOR=(1200,800)
DIGRAC=(100,100)
KORAK=0.5
ziv=True
x1,y1=(float(DPROZOR[0]/2-DIGRAC[0]/2),float(DPROZOR[1]-DIGRAC[1]))
x2,y2=(float(DPROZOR[0]/2-DIGRAC[0]/2),0)
pozicija1=[x1,y1]
pozicija2=[x2,y2]
desno1,levo1,gore1,dole1=(False,False,False,False)
desno2,levo2,gore2,dole2=(False,False,False,False)
prozor=pygame.display.set_mode(DPROZOR)
def crtaj():
prozor.fill(pygame.Color("skyblue"))
pygame.draw.rect(prozor,pygame.Color("gold"),(pozicija1,DIGRAC))
pygame.draw.rect(prozor, pygame.Color("red"), (pozicija2, DIGRAC))
def keyDown1():
global desno1,levo1,gore1,dole1
if(event.type == pygame.KEYDOWN):
if(event.key == pygame.K_RIGHT): desno1=True
if(event.key == pygame.K_LEFT): levo1=True
if(event.key == pygame.K_UP): gore1=True
if(event.key == pygame.K_DOWN): dole1=True
def keyDown2():
global desno2,levo2,gore2,dole2
if(event.type == pygame.KEYDOWN):
if(event.key == pygame.K_d): desno2=True
if(event.key == pygame.K_a): levo2=True
if(event.key == pygame.K_w): gore2=True
if(event.key == pygame.K_s): dole2=True
def keyUp1():
global desno1,levo1,gore1,dole1
if(event.type == pygame.KEYUP):
if(event.key == pygame.K_RIGHT): desno1=False
if(event.key == pygame.K_LEFT): levo1=False
if(event.key == pygame.K_UP): gore1=False
if(event.key == pygame.K_DOWN): dole1=False
def keyUp2():
global desno2,levo2,gore2,dole2
if(event.type == pygame.KEYUP):
if(event.key == pygame.K_d): desno2=False
if(event.key == pygame.K_a): levo2=False
if(event.key == pygame.K_w): gore2=False
if(event.key == pygame.K_s): dole2=False
def kretanje1():
global x1,y1,pozicija1
if(desno1): x1+=KORAK
if(levo1): x1-=KORAK
if(x1 < 0): x1+=KORAK
if(x1 > DPROZOR[0] - DIGRAC[0]): x1-=KORAK
if(gore1): y1-=KORAK
if(dole1): y1+=KORAK
if(y1 < 0): y1+=KORAK
if(y1 > DPROZOR[1] - DIGRAC[1]): y1-=KORAK
pozicija1=[x1,y1]
def kretanje2():
global x2,y2,pozicija2
if(desno2): x2+=KORAK
if(levo2): x2-=KORAK
if(x2 < 0): x2+=KORAK
if(x2 > DPROZOR[0] - DIGRAC[0]): x2-=KORAK
if(gore2): y2-=KORAK
if(dole2): y2+=KORAK
if(y2 < 0): y2+=KORAK
if(y2 > DPROZOR[1] - DIGRAC[1]): y2-=KORAK
pozicija2=[x2,y2]
while ziv:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
crtaj()
keyDown1()
kretanje1()
keyUp1()
kretanje1()
keyDown2()
kretanje2()
keyUp2()
kretanje2()
print()
print(desno1,levo1,gore1,dole1)
print()
print(desno2,levo2,gore2,dole2)
print()
pygame.display.update()
左=左
desno=對
戈爾=向上
救濟=下降
ziv=活着
DPROZOR=窗口尺寸
DIGRAC=玩家維度
KORAK=步
pozicija=位置
kretanje=運動
crtaj=畫
這是一個縮進的問題。 您必須在事件循環而不是應用程序循環中評估事件:
while ziv:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
keyDown1()
kretanje1()
keyUp1()
kretanje1()
keyDown2()
kretanje2()
keyUp2()
kretanje2()
crtaj()
# [...]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.