如何解决Pygame 每 10 秒就有一个新敌人?
对不起,这个问题可能是重复的,但我一直在搜索关于这个主题的很多东西,但我什么也做不了。那么我怎样才能每 10 秒在屏幕上显示一个新敌人呢? 顺便说一句,我想使用 USEREVENTS 来实现它,因为我正在学习它们。 我真的遇到了这类事件的问题,我无法获得它们,这就是我尝试过的:
a = 10000
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_e:
pygame.time.set_timer(pygame.USEREVENT+1,a)
if a == 0:
screen.blit(enemy,(enemyX,enemyY))
a = 5000
解决方法
在 pygame 中存在一个计时器事件。使用 pygame.time.set_timer()
在事件队列中重复创建 USEREVENT
。时间必须以毫秒为单位设置。例如:
timer_interval = 10000 # 10 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event,timer_interval)
注意,在 pygame 中可以定义客户事件。每个事件都需要一个唯一的 ID。用户事件的 ID 必须介于 pygame.USEREVENT
(24) 和 pygame.NUMEVENTS
(32) 之间。在这种情况下,pygame.USEREVENT+1
是计时器事件的事件 ID。
在事件循环中接收事件:
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
elif event.type == timer_event:
# [...]
可以通过将 0 传递给 pygame.time.set_timer
的 time 参数来停止计时器事件。
注意,你必须使用列表来管理敌人。事件发生时,将新的敌人位置添加到列表中。循环遍历敌人。移动并绘制循环中的敌人:
timer_interval = 10000 # 10 seconds
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event,timer_interval)
enemy_list = []
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == timer_event:
# [...]
enemy_list.append([enemyX,enemyY])
# [...]
for enemy_pos in enemy_list:
screen.blit(enemy,enemy_pos)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。