飞机大战制作笔记5

1.道具发放
把道具发放设置为一个自定义时间(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()	
	...


1)炸弹:
#绘制全屏炸弹补给,并检测是否获得
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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值