Как обрабатывать данные onblur и поддерживать клиента в живых? - PullRequest
0 голосов
/ 16 мая 2019

Я запускаю многопользовательскую игру Bomberman с phaser & socket.io.

У меня возникают проблемы, когда игрок теряет фокус на холсте:
Игрок не может быть убит другимиигроки, потому что он не сосредоточен на вкладке.Когда игрок идет onBlur, комната передает позицию хозяина кому-то другому.

То, что я хочу:
Когда клиент не сфокусирован и IsHost комната должна принять нового хоста в списке текущих игроков.Но если последний хост больше не хост, он также должен отправить все данные игрока на сервер, чтобы другие люди могли его убить onBlur или onResume.

I 'Я просто ищу способ предотвратить утечки памяти и сфокусировать сокет + клиент 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 );

Проблема в том, что игроки, которые возобновляют игру, могут отлично возобновить игру, но их нельзя убить на других / других вкладках.

...