如何处理数据模糊并保持客户端存活?

时间:2019-05-16 14:11:09

标签: socket.io phaser-framework multiplayer

我正在使用Phaser&socket.io运行轰炸机多人游戏。

当玩家失去对画布的关注时,我遇到了麻烦:
该玩家无法被其他玩家杀死,因为他没有将注意力集中在选项卡上。当玩家进入onBlur时,房间将主持人的位置分配给其他人。

我想要的是:
当客户没有集中注意力并且IsHost时,会议室应在当前玩家列表中担任新的主持人。但是,如果最后一个主机不再是主机,它也应该将播放器的所有数据发送到服务器,以便其他人可以杀死他onBluronResume

我只是在寻找一种方法来防止内存泄漏,并使套接字和客户端始终集中在onBlur上。因此,如果不将注意力放在标签上,主持人+非主持人玩家应该可以死亡。

Game.js

this.game.onPause.add(function(){
            SOCKET.emit('player unavailable');
            if(IS_HOST) this.stopBeingHost();

            IS_FOCUSED = false;
        }, this);

        this.game.onResume.add(function(){
            SOCKET.emit('player available');

            IS_FOCUSED = true;
        }, this);

        // Game pause
        window.onblur = (function (_this) {
            return function () {
                SOCKET.emit('player unavailable');
                if(IS_HOST) _this.stopBeingHost();

                IS_FOCUSED = false;
            if(_this.key_timer) { 
                _this.game.time.events.remove(_this.key_timer);
                _this.key_timer = false;
            }

  update: function() {
        if(!this.is_game_started) return;

SocketEventHandler.js

// when current client lost game focus
    this.onPlayerUnavailable = function(){
        console.log("Player "+this.id+" unavailable");
        this.player.is_active = true;

        if( this.room.isHost( this.player ) ){
            this.room.rc_timestamp = Date.now();
            this.room.selectNewHost( io );
        }
    };

    // when current client gained game focus
    this.onPlayerAvailable = function(){
        console.log("Player "+this.id+" available");
        this.player.is_active = true;

        if( !this.room.hasHost() )
            this.room.selectNewHost( io );

问题在于,恢复游戏的玩家可以完美恢复,但不能在模糊/其他选项卡上被杀死。

0 个答案:

没有答案