有没有办法使用字符串获取 pygame 键的代码?
Is there a way to get the code of a pygame key using the string?
我正在尝试制作类似于简单 2D 游戏引擎的东西。这不是真的,但有点。它的重点是不仅允许方形拼贴,还允许三角形和六边形拼贴。我为此使用 pygame,因此它也是访问 pygame 的一种更简单的方法。无论如何,我目前正在研究按钮输入。我有这个 rn:
def keyboardInput(key: str):
keys=pygame.key.get_pressed()
if keys[pygame.key.key_code(key)]:
return True
else:
return False
我认为这目前可行,但似乎仍有问题。也许是 main.py.
中的代码
不,没有将字符串转换为 pygame 键枚举器的 pygame 函数。请参阅 pygame.key
模块。您必须创建自己的字典,将字符串映射到键。例如:
key_map = {
"left" : pygame.K_LEFT,
"right" : pygame.K_RIGHT,
...
}
def keyboardInput(key: str):
keys = pygame.key.get_pressed()
return key in key_map and keys[key_map[key]]
或者,您可以使用 getattr
:
获取密钥枚举常量
import pygame.locals
def keyboardInput(key: str):
keys = pygame.key.get_pressed()
try:
return keys[getattr(pygame.locals, "K_" + key)]
except:
return keys[getattr(pygame.locals, "K_" + key.upper())]
无论如何你都需要处理事件。见 pygame.event.get()
respectively pygame.event.pump()
:
For each frame of your game, you will need to make some sort of call to the event queue. This ensures your program can internally interact with the rest of the operating system.
因此你必须在每一帧调用一次pygame.event.pump()
。您可以在另一个函数中执行此操作:
def updateInput():
pygame.event.pump()
您可以使用 getattr
执行 任何 类型的变量查找:
key=getattr(pygame.locals,key)
使用 locals
减少了无意义的点击次数(如 mixer
)。当然,你可以只写
from pygame import locals as magic
提供 实数 常量(例如)….magic.K_TAB
。或者,如果您想提供一个包含这些常量 和 您自己的一些接口的模块,请执行
from pygame.locals import *
在该模块中。 (使用 import *
来 避免 限定通常被认为是不好的形式,但在这里你将使用它来 adapt 限定。)
我正在尝试制作类似于简单 2D 游戏引擎的东西。这不是真的,但有点。它的重点是不仅允许方形拼贴,还允许三角形和六边形拼贴。我为此使用 pygame,因此它也是访问 pygame 的一种更简单的方法。无论如何,我目前正在研究按钮输入。我有这个 rn:
def keyboardInput(key: str):
keys=pygame.key.get_pressed()
if keys[pygame.key.key_code(key)]:
return True
else:
return False
我认为这目前可行,但似乎仍有问题。也许是 main.py.
中的代码不,没有将字符串转换为 pygame 键枚举器的 pygame 函数。请参阅 pygame.key
模块。您必须创建自己的字典,将字符串映射到键。例如:
key_map = {
"left" : pygame.K_LEFT,
"right" : pygame.K_RIGHT,
...
}
def keyboardInput(key: str):
keys = pygame.key.get_pressed()
return key in key_map and keys[key_map[key]]
或者,您可以使用 getattr
:
import pygame.locals
def keyboardInput(key: str):
keys = pygame.key.get_pressed()
try:
return keys[getattr(pygame.locals, "K_" + key)]
except:
return keys[getattr(pygame.locals, "K_" + key.upper())]
无论如何你都需要处理事件。见 pygame.event.get()
respectively pygame.event.pump()
:
For each frame of your game, you will need to make some sort of call to the event queue. This ensures your program can internally interact with the rest of the operating system.
因此你必须在每一帧调用一次pygame.event.pump()
。您可以在另一个函数中执行此操作:
def updateInput():
pygame.event.pump()
您可以使用 getattr
执行 任何 类型的变量查找:
key=getattr(pygame.locals,key)
使用 locals
减少了无意义的点击次数(如 mixer
)。当然,你可以只写
from pygame import locals as magic
提供 实数 常量(例如)….magic.K_TAB
。或者,如果您想提供一个包含这些常量 和 您自己的一些接口的模块,请执行
from pygame.locals import *
在该模块中。 (使用 import *
来 避免 限定通常被认为是不好的形式,但在这里你将使用它来 adapt 限定。)