python - Python:在 pygame 中创建多个循环的更好方法是什么?
问题描述
我会知道在我的 pygame 项目中创建多个循环的最佳方法是什么。这是我将拥有的所有循环:
load loop
game loop
main loop
setting loop
pause loop
但这是最好的方法吗?
这就是我的代码的样子
run = True
while run :
# do load loop
def main():
run = True
while run :
if loop == 'main' :
run2 = True
while run2 :
# pygame loop
if loop == 'pause' :
run2 = True
while run2 :
# other loop
...
if __name__ == '__main__' :
main()
解决方案
为什么需要多个嵌套循环?一个存储游戏当前状态的变量就足够了:
def main():
gamestate = 'load'
run = True
while run:
if gamestate == 'load':
# [...]
elif gamestate == 'game':
# [...]
# [...]
# [...]
pygame.display.flip()
if __name__ == '__main__' :
main()
如果你想切换游戏的状态,那么你所要做的就是改变变量gamestate
。
您只需要一个运行游戏的主循环。循环中发生的事情可能会有所不同,具体取决于游戏的当前状态。但它始终是同一个循环,它处理事件、清除显示、绘制场景并最终更新显示。
请注意,您甚至可以定义执行游戏不同部分的函数,但您不需要函数中的循环:
def load(events):
# [...]
def game(events):
# [...]
def main():
gamestate = 'load'
run = True
while run:
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
run = False
# [...]
if gamestate == 'load':
load(events)
elif gamestate == 'game':
game(events)
# [...]
# [...]
pygame.display.flip()
if __name__ == '__main__' :
main()
甚至在课堂上:
class MyGame:
def __init__(self):
self.gamestate = 'load'
self.run = True
self.events = []
def load(self):
# [...]
def game(self):
# [...]
def main(self):
while self.run:
self.events = pygame.event.get()
for event in self.events:
if event.type == pygame.QUIT:
self.run = False
# [...]
if self.gamestate == 'load':
self.load()
elif self.gamestate == 'game':
self.game()
# [...]
# [...]
pygame.display.flip()
if __name__ == '__main__' :
app = MyGame()
app.main()
推荐阅读
- ios - Info.plist 中 CFBundleDocumentTypes 键的值必须是字典数组
- javascript - 我如何检测 iframe 视频是否不起作用
- assembly - 在汇编程序中将整数运算的结果转换为十进制
- matlab - 如何在 Matlab R2018b 中使用图像上的 4 个角绘制矩形?
- python - 如何获取列表中的完整元素名称
- reactjs - 在 Expo React Native 中下载 Base64 二维码
- python - 如何指定部分直方图补丁的颜色?
- oracle - 在 Oracle Sql 中夏令时开始和结束时将 CST 转换为 UTC
- node.js - 使用 Mongoose 和 node.js 创建会话时出错
- flutter - 如何传递具有 Null 值的图像的颤振列表