在python中使用游戏状态枚举
我目前正在用pyGame开发一个python游戏,希望在游戏中为不同的状态GameState、levelstate等使用枚举 我从Enum类继承了自己的GameState类,如下面的代码所示。 我有枚举成员设置主菜单,inGame等。。。然后将它们放入名为allGameStates的列表中 我在尝试遍历setter函数中包含所有游戏状态的列表时遇到了一个问题 我得到-> AttributeError:“GameState”对象没有属性“allGameStates” 另外,当鼠标悬停在列表变量allGameStates上时,它会显示-> 推断类型:配子状态 它不应该是列表类型吗 任何建议都会很好在python中使用游戏状态枚举,python,data-structures,enums,pygame,Python,Data Structures,Enums,Pygame,我目前正在用pyGame开发一个python游戏,希望在游戏中为不同的状态GameState、levelstate等使用枚举 我从Enum类继承了自己的GameState类,如下面的代码所示。 我有枚举成员设置主菜单,inGame等。。。然后将它们放入名为allGameStates的列表中 我在尝试遍历setter函数中包含所有游戏状态的列表时遇到了一个问题 我得到-> AttributeError:“GameState”对象没有属性“allGameStates” 另外,当鼠标悬停在列表变量al
class GameState(Enum):
mainMenu = 'MainMenu'
inGame = 'InGame'
pause = 'Pause'
exit = 'Exit'
allGameStates = list([mainMenu, inGame, pause, exit])
curgamestate = allGameStates[0]
def __init__(self, newgamestate, *args):
super().__init__(*args)
self.gamestate = newgamestate
@property
def gamestate(self):
"""Gets the current game state"""
return self.curgamestate
@gamestate.setter
def gamestate(self, state):
"""Sets the current game state to another"""
try:
for gamestates in self.allGameStates:
if gamestates.name == state:
self.curgamestate = state
except ValueError as err:
print(err.args)
看来你的问题在于时机和理解1: 枚举成员名称“mainMenu”、“pause”等直到类完成后才实际转换为枚举成员;这意味着任何类级别都引用“allGameStates”=。。。是指字符串 self.curgamestate=…-这是在枚举成员的实例上设置当前游戏状态,而不是在类上设置当前游戏状态-因此当前游戏状态可以而且将是什么!这是一片混乱。你需要的是自我 最后,是转换为枚举的经验法则——任何简单的名称分配。因此,不仅mainMenu、inGame、pause和exit被转换为枚举,allGameStates和curgamestate2也被转换为枚举 一些提示: 一旦游戏状态建立,listGameState将为您提供正确的成员列表 self.gamestate与self.name相同 self.allGameStates应该是self。_类_与普通类不同,枚举类是可移植的 - 有关如何使用枚举的一些想法,请参见
2有关使简单名称分配不转换为枚举成员的方法,请参见识别问题-如果要实现有限状态机在场景之间切换,请修复您的问题,然后再看一看。谢谢您给出了非常清晰的答案!看起来枚举比其他语言(例如C语言)中的枚举要复杂一些。