如何在 pygame 中等待一段时间?
- 2024-12-23 08:43:00
- admin 原创
- 85
问题描述:
自从我开始学习 Python 和 Pygame 以来,我一直在代码中使用time.wait,但我一直在想是否还有其他方法可以做到这一点,以及每种方法的优缺点是什么。例如,Pygame 也有一个pygame.time.wait。python 的 wait 和 pygame 的 wait 函数有什么区别?哪一个更好?除了使用这两个函数之外,还有其他方法可以等待一段时间吗?
解决方案 1:
对于动画/冷却等:如果您想“等待”,但仍有代码运行,您可以使用:pygame.time.get_ticks
class Unit():
def __init__(self):
self.last = pygame.time.get_ticks()
self.cooldown = 300
def fire(self):
# fire gun, only if cooldown has been 0.3 seconds since last
now = pygame.time.get_ticks()
if now - self.last >= self.cooldown:
self.last = now
spawn_bullet()
解决方案 2:
对于 Python 一般而言,您可能想要查看sleep库。
然而,对于 Pygame,使用pygame.time.delay()将根据 CPU 时钟暂停给定的毫秒数以获得更高的准确性(与 pygame.time.wait 相反)。
解决方案 3:
如果您只是等待一段时间,则可以使用pygame.time.wait
或。但是,如果您想显示一条消息然后等待一段时间,则需要事先更新显示。仅当
调用或pygame.time.delay
时,显示才会更新。请参阅:pygame.display.update()
`pygame.display.flip()`pygame.display.flip()
这将更新整个显示屏的内容。
此外,您必须使用 处理事件pygame.event.pump()
,然后显示更新才会在窗口中可见。请参阅pygame.event.pump()
:
对于游戏的每一帧,您都需要对事件队列进行某种调用。这可确保您的程序能够与操作系统的其余部分进行内部交互。
这一切意味着你必须在或之前调用pygame.display.flip()
和:pygame.event.pump()
`pygame.time.delay()`pygame.time.wait()
screen.blit(text, (x, y))
pygame.display.flip()
pygame.event.pump()
pygame.time.delay(delay * 1000) # 1 second == 1000 milliseconds
另请参阅为什么 PyGame 在延迟或睡眠之前不在窗口中绘制?
无论如何,这不是在典型应用程序中等待或延迟某事的方式。等待时游戏不会响应。用于pygame.time.get_ticks()
测量时间。
例如,如果您想在显示屏上显示一条消息,请获取当前时间并计算该消息必须消失的时间点。只要当前时间低于计算时间,就显示该消息:
message_end_time = 0
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
# [...]
current_time = pygame.time.get_ticks()
if something_has_happened:
message_surf = font.render('Important message!', True, (255, 0, 0))
message_end_time = pygame.time.get_ticks() + 3000 # display for 3 seconds
window.fill(0)
# [...]
if current_time < message_end_time:
window.blit(message_surf, (x, y))
pygame.display.flip()
另请参阅如何阻止同时发射多颗子弹?
最小示例:PYGBAG demo
![IT科技](https://i.sstatic.net/5jD0C.png) repl.it/@Rabbid76/PyGame-MessageDelay
import pygame
pygame.init()
font = pygame.font.SysFont(None, 50)
text = font.render('press key or mouse', True, (255, 0, 0))
window = pygame.display.set_mode((500, 200))
clock = pygame.time.Clock()
message_end_time = pygame.time.get_ticks() + 3000
run = True
while run:
clock.tick(60)
current_time = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
text = font.render(pygame.key.name(event.key) + ' pressed', True, (255, 0, 0))
message_end_time = pygame.time.get_ticks() + 2000
if event.type == pygame.MOUSEBUTTONDOWN:
text = font.render('button ' + str(event.button) + ' pressed', True, (255, 0, 0))
message_end_time = pygame.time.get_ticks() + 2000
window.fill(0)
if current_time < message_end_time:
window.blit(text, text.get_rect(center = window.get_rect().center))
pygame.display.flip()
pygame.quit()
exit()
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)