pygame中的事件检测和处理

pygame中的事件检测和处理,第1张

pygame中的事件检测和处理

包括鼠标、键盘、定时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)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5689295.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存