2016-10-25 3 views
0

В состоянии helm, когда вы устанавливаете коэффициент деформации и нажимаете кнопку включения, он вызывает engage, который испускает необходимые данные. Сервер получает это, определяет, активны или нет инерционные демпферы, либо испускает 'warpFailed', либо обновляет коэффициент деформации. В app.js получен исходный код сервера и обновлен globalGame.warpFailed. В состоянии captain проверяется globalGame.warpFailed.Глобальная переменная Не обновляется во всех состояниях Phaser

Проблема заключается в том, что в состоянии helmglobalGame.warpFailed правильно зарегистрирован на консоли и отражает правильное состояние. В состоянии captain он постоянно регистрирует false независимо от того, что это за значение.

Я честно даже не уверен, что код, чтобы показать, но здесь все, что я могу думать:

server.js:

socket.on('warp', function (data) { 
    if (serverGameData.helm.inertDampeners) { 
     socket.emit('warpFailed'); 
    } else { 
     serverGameData.helm.warpFactor = data.helm.warpFactor; 
    } 
}); 

app.js состояние

var socket = io(), 
    globalGame = { 
     sfx: { 
      effects: null, 
      intro: null, 
      menuBoot: null, 
      impulse: null, 
      warp: null 
     }, 
     warpFailed: false 
    } 

/* LOTS OF IRRELEVANT CODE HERE - NONE OF WHICH TOUCHES THE ABOVE DECALRED */ 

socket.on('warpFailed', function() { 
    globalGame.warpFailed = true; 
}); 

штурвалом (это ТОЛЬКО место, на которое оно ссылается в этом состоянии, и это правильно регистрирует значение изменения на консоли):

update() { 
    console.log(globalGame.warpFailed); 
} 

engage() { 
// Called by a button press in this state 
    globalGame.sfx.effects.play("launch_02", 1); 
    socket.emit('warp', { 
     helm: { 
      warpFactor: this.warpNum 
     } 
    }); 
} 

состояние капитана (это также ТОЛЬКО место, на которое оно ссылается в этом состоянии. Он постоянно регистрирует false к консоли):.

update() { 
    console.log(globalGame.warpFailed); 
} 

Есть ли какая-то логика ошибки я делаю здесь или что-то очевидно, что я не хватает? Я проверил и повторно проверил, и это ТОЛЬКО области, которые имеют доступ или имеют какое-либо отношение к globalGame.warpFailed.

+0

Я почти уверен, что это связано с установкой значения внутри анонимной функции и областью определения переменных в JavaScript. Не знаю решения, извините. – BdR

+0

Вы объявляете свой 'globalGame' var внутри состояния? – jolmos

ответ

1

Это был вопрос:

socket.on('warp', function (data) { 
    if (serverGameData.helm.inertDampeners) { 
     socket.emit('warpFailed'); // <---- RIGHT HERE 
    } else { 
     serverGameData.helm.warpFactor = data.helm.warpFactor; 
    } 
}); 

warp Испустите исходил от состояния руля, который является уникальным сокет. Из-за этого ответ был отправлен только в этот конкретный сокет. Я изменил socket.emit('warpFailed') на io.emit('warpFailed'), и он успешно излучается во все гнезда, как и предполагалось.