1.道具发放
把道具发放设置为一个自定义时间(SUPPLY_TIME):
2)超级子弹
2.暂停时同时把音效也暂停
...
事件检测循环中:
把道具发放设置为一个自定义时间(SUPPLY_TIME):
#设定道具发放为自定义事件
SUPPLY_TIME = USEREVENT
pygame.time.set_timer(SUPPLY_TIME, 30 * 1000) #设置自定义事件发生的时间间隔为30秒
...
检测事件循环中:
#触发道具补给事件
elif event.type == SUPPLY_TIME:
supply_sound.play()
if choice([True, False]): #在True 和 False 中 随机选一个
bomb_supply.reset()
else:
bullet_supply.reset()
...
#绘制全屏炸弹补给,并检测是否获得
if bomb_supply.active:
bomb_supply.move()
screen.blit(bomb_supply.image, bomb_supply.rect) #绘制炸弹补给
if pygame.sprite.collide_mask(bomb_supply, me): #直接检测bomb_supply, me两个精灵是否发生碰撞
get_bomb_sound.play()
if bomb_num < 3: #如果原本炸弹数<=3个,就能获得一个炸弹
bomb_num += 1
bomb_supply.active = False #获得炸弹补给后,该补给图片消失
2)超级子弹
#超级子弹定时器(自定义事件)
DOUBLE_BULLET_TIME_FINISH = USEREVENT + 1 #定义一个自定义事件 名叫 DOUBLE_BULLET_TIME_FINISH 用来限制超级子弹使用的事件
#标志是否正在使用超级子弹
is_double_bullet = False
... ...主循环while中...
#事件检测循环中:
...
#触发超级子弹结束事件
elif event.type == DOUBLE_BULLET_TIME_FINISH:
is_double_bullet = False #超级子弹效果取消
pygame.time.set_timer(DOUBLE_BULLET_TIME_FINISH, 0)#暂停自定义事件的产生
...
#绘制超级子弹补给,并检测是否获得
if bullet_supply.active:
bullet_supply.move()
screen.blit(bullet_supply.image, bullet_supply.rect)
if pygame.sprite.collide_mask(bullet_supply, me): #直接检测bomb_supply, me两个精灵是否发生碰撞
get_bullet_sound.play()
#发射超级子弹
is_double_bullet = True #开始发射超级子弹
pygame.time.set_timer(DOUBLE_BULLET_TIME_FINISH, 18 * 1000) #自定义事件DOUBLE_BULLET_TIME_FINISH将在18秒后产生(18秒后,超级子弹失效)
bullet_supply.active = False
2.暂停时同时把音效也暂停
...
事件检测循环中:
if paused:#如果按了暂停,所有声音暂停,补给事件 暂停产生
pygame.time.set_timer(SUPPLY_TIME, 0) #如果暂停,“补给事件”自定义事件 暂停产生
pygame.mixer.music.pause()#背景音乐暂停
pygame.mixer.pause()#音效暂停
else: #如果不是暂停,所有声音正常播放,补给事件正常产生
pygame.time.set_timer(SUPPLY_TIME, 30 * 1000)
pygame.mixer.music.unpause()
pygame.mixer.unpause()