编写pygame.keys [0]时,它不会使用keys [0]

时间:2018-09-21 23:45:32

标签: python pygame

如果您编写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]

这为我解决了。非常感谢所有人。

1 个答案:

答案 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])
>>>