簡體   English   中英

pygame 連續和同時按鍵輸入

[英]pygame continuous and simultaneous key inputs

我再次陷入困境,無法在線找到任何有效的解決方案。 我正在嘗試使用 pygame 及其關鍵輸入來控制各種事物。 現在我需要同時使用幾個鍵。 我的代碼如下:

pygame.key.set_reapeat(50,50)
bProgramLoop = True
while (bProgramLoop == True):

    for event in pygame.event.get():
        if (event.type == pygame.QUIT):
            bProgramLoop = False
        if (pygame.key.get_pressed()[pygame.K_LEFT]):
            EXECUTE_FUNCTION1()
            print "left"
        if (pygame.key.get_pressed()[pygame.K_RIGHT]):
            EXECUTE_FUNCTION2()
            print "right"

現在我遇到的問題是:當我按住“LEFT of RIGHT”時,它會正確地連續記錄我向左/向右按下的信息。 但是,當我按住“LEFT”並輕按“RIGHT”時,它會記錄左和右已被按下,但隨后停止以記錄“LEFT”仍在被按下。

任何人的想法? 任何幫助將不勝感激。 米莎

您在pygame.key.repeat()中拼寫了重復的拼寫錯誤。 我糾正了這個問題,對我有用。

def main():
    while Running:
        check_events()
        update()
        clock.tick(FPS) 

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

            if key == pygame.K_q:
                Running = False
                return

        if (pygame.key.get_pressed()[pygame.K_LEFT]):
            #EXECUTE_FUNCTION1()
            print "left"
        if (pygame.key.get_pressed()[pygame.K_RIGHT]):
            #EXECUTE_FUNCTION2()
            print "right"

在我的代碼中,“重復”是正確拼寫的。

我找到了解決我的問題的方法。 上面的代碼需要修改。

pygame.key.set_repeat(50,50)
bProgramLoop = True
while (bProgramLoop == True):

    for event in pygame.event.get():
        if (event.type == pygame.QUIT):
            bProgramLoop = False
        if (event.type == pyame.KEYDOWN):
            if (event.key == pygame.K_a)   # if A is pressed
                bKeyA = True               # set the Boolean True
            if (event.key == pygame.K_s)   
                bKeyS = True
        if (event.type == pyame.KEYDOWN):
            if (event.key == pygame.K_a)   # if A is released
                bKeyA = False# set the Boolean False
            if (event.key == pygame.K_s)   
                bKeyS = False

    if (bKeyA == True):
        Execute_function1()
    if (bKeyB == True):
        Execute_function2()

我仔細檢查了一下,重復的拼寫是否正確,一旦敲擊另一個鍵盤,它就不會繼續進行鍵盤輸入。 據我所知,問題是,甚至在按下某個鍵時發生一次。 同時按下另一個鍵時,事件丟失。

因此,解決方案是將變量設置為true,直到提起鑰匙為止,從而將變量設置為false。

如果你想使用連續輸入而不是嘗試這個,這是我的代碼。

import pygame as py
import time
sc = py.display.set_mode((800, 600))
x = 350
y = 300
blue = (0, 0, 255)
last = 0
while True:
  key = py.key.get_pressed()
  for event in py.event.get():
    if event.type == py.KEYDOWN:
      last = event.key
    else:
      last = 0
  if last == py.K_UP:
    y -= 0.1
  if last == py.K_DOWN:
    y += 0.1
  if last == py.K_LEFT:
    x -= 0.1
  if last == py.K_RIGHT:
    x += 0.1
  sc.fill((0,255,0))
  py.draw.rect(sc, blue, (x,y,50,50))
  py.display.flip()

如果你想使用同時輸入,那么這里:

import pygame as py
import time
sc = py.display.set_mode((800, 600))
x = 350
y = 300
blue = (0, 0, 255)
last = 0
def move(times, yspeed, xspeed):
  for i in range(times):
    global x, y
    x += (xspeed / times)
    y += (yspeed / times)
    time.sleep((xspeed / times / 10) + (yspeed / times / 10))
while True:
  key = py.key.get_pressed()
  for event in py.event.get():
    if event.type == py.KEYDOWN:
      last = event.key
    else:
      last = 0
    if event.key == py.K_UP and event.key == py.K_l:
      y -= 0.1
  sc.fill((0,255,0))
  py.draw.rect(sc, blue, (x,y,50,50))
  py.display.flip()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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