如果您编写pygame.K_UP或您想要的任何键(作为pygame的常数K_UP),该代码将起作用。
但是,我需要编写一个以键为输入的函数。例如:
def player(keys)
""" keys is a list """
keystate = pygame.key.get_pressed()
if keystate[pygame.keys[0]]:
etc
它给我以下错误:“ AttributeError:模块'pygame'没有属性'keys'“
这样做的目的是创建具有不同控件的播放器的多个实例,因此控件存储在列表中:
keys = [["LEFT", "UP", "RIGHT"], ["a", "w", "d"], ["4", "8", "6"]]
keys = [["pygame.K_" + e for e in elem] for elem in keys] # join pygame.K_ to each element
players = list()
for i in range(num_players):
players.append(Player(keys[i]))
解决方案: 最后,贾森哈珀的评论使我找到了解决方案。在寻找getattr(pygame,key)时,我发现了该页面,并提出了相同的问题:Pygame, get key object from character
keys = [["LEFT", "UP", "RIGHT"], ["a", "w", "d"], ["4", "8", "6"]]
keys = [[getattr(pygame, "K_" + e) for e in elem] for elem in keys]
这为我解决了。非常感谢所有人。
答案 0 :(得分:1)
该错误说明了一切:pygame模块不具有keys属性。您正在创建keys
变量作为函数的参数。点符号用于访问某些对象的属性。但是,在这种情况下,您想访问函数的keys
参数。
此外,您需要了解K_UP是具有某些值的int变量的标识符。您正在尝试通过其拥有的值来访问变量,而不是使用其标识符。
>>> print(pygame.K_UP)
273
>>> type(pygame.K_UP)
<class 'int'>
以下是如何消除错误的示例。绝不是说这可行,因为我没有使用Pygame的经验,但这只是向您显示了如何消除错误。
>>> def function(keys):
... keystate = pygame.key.get_pressed()
... if keystate[keys[0]]:
... pass
...
>>> function([pygame.K_UP, pygame.K_DOWN])
>>>