python - python pygame暂停函数
问题描述
我是初学者,我的代码有问题。在这里,您可以看到我的代码的简短摘录。
这是我创建的一个简单的蛇游戏,但我试图添加一个暂停。我明白了,但是当我开始暂停时,我无法关闭它。
可能我的代码中有一个基本错误,所以我无法前进。我希望你能帮助我。
先感谢您!
def checkquit(e):
running = True
pause = False
for ev in e:
if ev.type == pygame.QUIT:
exit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
quit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = False
while pause:
#running = False
pause = True
red = (255,0,0)
screen = pygame.display.set_mode((800,500))
screen.fill((0,0,0))
my_font = pygame.font.SysFont("monospace", 50)
my_font_two = pygame.font.SysFont("monospace", 10)
text1 = myfont.render("Pause!", 100, red)
text2 = myfont.render("Please restart the game", 100, red)
screen.blit(text2, (10, 200))
screen.blit(text1, (230, 100))
pygame.display.update()
for ev in e:
if ev.type == pygame.QUIT:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = True
解决方案
暂停屏幕显示在单独的应用程序循环中。您也必须在该循环中获取事件。请注意,在您的代码中,e
“暂停”循环中永远不会更改的内容:
def checkquit(e):
global running
running = True
pause = False
for ev in e:
if ev.type == pygame.QUIT:
exit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
quit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = True
while pause:
# [...]
# get the new events
e = pygame.event.get()
# handle the events in the loop
for ev in e:
if ev.type == pygame.QUIT:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
pause = False
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = True
runnung
似乎是全局命名空间中的一个变量。您必须使用该global
语句来更改其状态。此外,在“暂停”循环中重新创建窗口表面是多余的。
screen = pygame.display.set_mode((800,500))
建议改变游戏流程。使用 1 个应用程序循环。例如:
myfont=pygame.font.SysFont("monospace",50)
myfonttwo=pygame.font.SysFont("monospace",10)
text1=myfont.render("Pause!",100,red)
text2=myfont.render("Please restart the game",100,red)
def checkquit(e):
global running, pause
for ev in e:
if ev.type == pygame.QUIT:
exit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_ESCAPE:
if pause:
pause = False
else:
quit(0)
running = True
if ev.type == pygame.KEYDOWN and ev.key == pygame.K_p:
pause = not pause
running, pause = True, False
while running:
events = pygame.event.get()
checkquit(events)
screen.fill((0,0,0))
if pause:
# draw pause screen
screen.blit(text2,(10,200))
screen.blit(text1,(230,100))
else:
# draw game
# [...]
pygame.display.update()
推荐阅读
- google-analytics - ga.getAll() 不会返回所有的跟踪器
- ruby - 在 ruby 中按多个值对嵌套哈希进行排序
- android - kotlin.TypeCastException:null 不能转换为非 null 类型 android.support.design.widget.FloatingActionButton
- spring-boot - 404 访问 http://localhost:9090/swagger-ui.html
- tensorflow - 张量流:_dataset_ops.so 未找到
- html - 在页面外滚动时保持页脚粘在底部
- css - 在屏幕中央放置一个按钮
- python - 带有 psycopg2 的 Ponyorm:服务器意外关闭了连接(会话超时?)
- php - Wordpress,单击“更新用户”后的功能
- r - 按多个条件过滤