我正在使用 pygame 制作游戏,并尝试添加项目。我有一个每个项目的函数,当您获得该项目时可以调用该函数(这部分效果很好)。
但是,当我将这些函数分配给字典时,它会调用并使用它们,为您提供游戏中的每个项目。我已经测试了使用这些函数的每一段代码,所以我知道这就是原因。此外,我之前多次遇到过这个问题,所以我确信这就是正在发生的事情。
(编辑:澄清一下,有一个单独的列表,其中包含已获取的项目,该列表应该是空的。每个项目的效果都被添加,但不是项目本身,证明这是错误的原因)
这是项目字典:
items = {"Damage Stone": damageStone(player), "Health Stone": healthStone(player), "Burn": burn(player), "Poison": poison(player), "Freeze": freeze(player)}
这是在主游戏循环开始之前分配的。
有什么方法可以防止分配到此列表时调用函数吗?
备注:
显然我可以编写一段代码来撤销每个项目的效果,但这并不是最佳选择,随着项目数量的增长会变得非常令人沮丧。
Lambda 函数也有同样的问题,也有同样的问题。
如果您希望字典包含稍后调用的函数,您可以将 函数对象放入字典中,如下所示:
items = {
"Damage Stone": damageStone,
"Health Stone": healthStone,
...
}
因为函数名称后面没有括号,所以不会立即调用它们。 字典只存储函数对象,您可以稍后调用:
game_function = items["Damage Stone"]
game_function(player)