栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pygame中的事件检测和处理

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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):
        # 炸弹移动
        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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/688786.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号