簡體   English   中英

如何在事件隊列中為pygame添加按鍵事件

[英]How to add keypress events in event queue for pygame

我有一個用pygame制作的游戲,運行完全沒問題。 我想創建一個系統,它從一個文件中讀取按鍵(它將包含按鍵代碼按下單獨的行)並將它們添加到pygame事件隊列中,以便玩家代理自己移動而不會實際按下按鍵。

在閱讀了pygame文檔后,我嘗試創建一個新的事件對象並將其添加到隊列中,但事件構造函數需要在任何地方都找不到的屬性。

有沒有人知道創建事件實例需要哪些屬性,或者是否有其他更好的方法來實現我的目標?

更新:我已成功將我的事件添加到隊列中,但即使它們與自動創建的完全相同,它們似乎也不起作用。 我正在打印下面的事件隊列。 當我實際按下'a'鍵時,會添加突出顯示的事件。 正如您所看到的,我的事件(上面的事件)不會觸發其他事件。

更新2:我在keydown事件的事件處理代碼中添加了一些print語句。 這些只有在我實際按下鍵盤上的鍵並且似乎忽略我從代碼中引發的事件時才會執行。
input_list = [pg.K_RETURN, pg.K_a, pg.K_s] if self.cursor.state == c.PLAYER1: self.cursor.rect.y = 358 if keys[pg.K_DOWN]: print("down") self.cursor.state = c.PLAYER2 for input in input_list: if keys[input]: print("button") self.reset_game_info() self.done = True elif self.cursor.state == c.PLAYER2: self.cursor.rect.y = 403 if keys[pg.K_UP]: print("up") self.cursor.state = c.PLAYER1

我正在創建我的事件:
pg.event.post(pg.event.Event(pg.KEYDOWN, {'mod': 0, 'scancode': 30, 'key': pg.K_a, 'unicode': 'a'}))
我通過打印當我實際按下鍵'a'時發生的事件找到了這些值。

Event對象的第一個參數是它的類型,它是pygame.USEREVENTpygame.NUMEVENTS之間的整數(24到32獨占)。 這用於從其他事件中識別您的事件,例如pygame.KEYDOWNpygame.MOUSEBUTTONDOWN等。

第二個參數是字典或關鍵字參數。 這些將是您的活動的屬性。 dict應該包含字符串作為鍵。

這是一個簡短的例子,演示如何使用它:

import pygame
pygame.init()

event1 = pygame.event.Event(pygame.USEREVENT, {"greeted": False, "jumped": 10, "ID": 1})
event2 = pygame.event.Event(pygame.USEREVENT, greeted=True, jumped=200, ID=2)

pygame.event.post(event1)
pygame.event.post(event2)

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        raise SystemExit
    elif event.type == pygame.USEREVENT:
        print("Player:", event.ID, "| Greeted:", event.greeted, "| Jumped:", event.jumped)
    elif event.type == pygame.USEREVENT + 1:
        print("Player:", event.ID, "| Greeted:", event.greeted, "| Jumped:", event.jumped)

這將輸出:

Player: 1 | Greeted: False | Jumped: 10
Player: 2 | Greeted: True | Jumped: 200

暫無
暫無

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

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