包括鼠标、键盘、定时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): # 炸d移动 self.rect.y -= self.speed # 销毁炸d 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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)