包括鼠标、键盘、定时Event和自定义的Event。
1、定时Event
# 1、每秒一次敌机生成事件
pg.time.set_timer(CREATE_ENEMY_EVENT, 2000)
pg.time.set_timer(ENEMY_FIRE_EVENT, 800)
2、自定义Event
def update(self):
# 炸弹移动
self.rect.y -= self.speed
# 销毁炸弹
if self.rect.y <= SCREEN_RECT.height // 2:
self.kill()
# 用事件实现全局通知,炸掉所有敌机、清理所有子弹
_bombevent = pg.event.Event(BOMB_EVENT)
pg.event.post(_bombevent)
3、各类Event响应及处理
def _EventHandle(self):
# 基础及自定义事件
for event in pg.event.get():
if event.type == pg.QUIT:
self._GameOver()
elif event.type == GAME_EXIT_EVENT:
self._GameOver()
elif event.type == GAME_PAUSE_EVENT:
self._GamePause()
elif event.type == GAME_RESTART_EVENT:
self._InitGame()
print('game pause', self.gamestate)
elif event.type == CREATE_ENEMY_EVENT:
# 创建敌机
if self.gamestate == GAMESTATE_START:
_rate = random.randint(0, 100)
if _rate > 80:
_enemy = EnemySprite(2)
elif _rate > 50:
_enemy = EnemySprite(1)
elif _rate > 10:
_enemy = EnemySprite(0)
else:
_enemy = EnemySprite(0)
_enemy.add(self.gs_enemylist)
elif event.type == BOMB_EVENT:
self._BombAllSprite()
elif event.type == ENEMY_FIRE_EVENT:
# 敌机开火
if self.gamestate == GAMESTATE_START:
for _enemy in self.gs_enemylist:
_enemy.fire(self.gs_enemybulletlist)
elif event.type == CREATE_SUPPLY_ENENT:
if self.gamestate == GAMESTATE_START:
if random.randint(1, 50) < 10:
# 创建补给
_supplysprite = SupplySprite(SUPPLY_TYPE[random.randint(0, 1)])
self.gs_supplylist.add(_supplysprite)
elif event.type == HERO_FIRE_EVENT:
# 英雄开火
if self._hero_fire_state:
for _hero in self.gs_herolist:
self._hero_bullet_count = _hero.shoot(self.gs_herobulletlist)
# 键盘按下(只能单键处理)
elif event.type == pg.KEYDOWN:
# 键盘控制游戏
if event.key == pg.K_ESCAPE:
self._GameOver()
elif event.key == pg.K_x:
# 英雄发射炸弹
for _hero in self.gs_herolist:
self._hero_bomb_count = _hero.bomb(self.gs_herobomblist)
elif event.key == pg.K_SPACE:
# 英雄开火状态修改
if self._hero_fire_mode == HERO_FIRE_AUTO:
self._hero_fire_state = not self._hero_fire_state
else:
for _hero in self.gs_herolist:
self._hero_bullet_count = _hero.shoot(self.gs_herobulletlist)
# 鼠标点击
elif event.type == pg.MOUSEBUTTONDOWN:
for _sysobj_ in self.gs_sysbuttonlist:
if _sysobj_.is_active(pg.mouse.get_pos()):
_sysobj_.execute()
elif event.type == pg.MOUSEMOTION:
if self.gamestate == GAMESTATE_START:
for _hero_ in self.gs_herolist:
_hero_.movebymouse(pg.mouse.get_pos())
# 按键事件(键值表,可以多键组合)
keys_pressed = pg.key.get_pressed()
if keys_pressed[pg.K_LEFT] and keys_pressed[pg.K_UP]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_UPLEFT)
elif keys_pressed[pg.K_RIGHT] and keys_pressed[pg.K_UP]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_UPRIGHT)
elif keys_pressed[pg.K_RIGHT] and keys_pressed[pg.K_DOWN]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_DOWNRIGHT)
elif keys_pressed[pg.K_LEFT] and keys_pressed[pg.K_DOWN]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_DOWNLEFT)
elif keys_pressed[pg.K_LEFT]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_LEFT)
elif keys_pressed[pg.K_RIGHT]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_RIGHT)
elif keys_pressed[pg.K_UP]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_UP)
elif keys_pressed[pg.K_DOWN]:
for _hero in self.gs_herolist:
_hero.move(MOVETO_DOWN)



