簡體   English   中英

pygame keyup 未正確注冊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM