2

この質問は、NodeJS の WebSocket API (つまり、var webSocketServer = require('websocket').server;) に関するものです。

function Game(canvas) {
    this.wArray;
    this.runConnection();
    // I want to be able to see changes in variables at this point
    console.log(this.wArray[1][2]); // is out of scope or something
}

_p = Game.prototype;

_p.runConnection = function() {
    this.connection = new WebSocket('ws://localhost:1337');
    this.connection.onmessage = function (message) {
           this.wArray = JSON.parse(message.data);
    };
    // code here runs before code inside onmessage, it must be asychronous
};

したがって、サーバーからメッセージを受信すると、そのメッセージを取得して、コード内の変数などを更新できるはずです。現時点では、onmessage 関数内にあるものを更新することしかできないようです。オンラインの例はすべて、onmessage 内で console.log() を使用している人を示しているだけです。サーバーがクライアント情報を送信し、その情報を使用して、実行中のゲームの特定の側面を更新できるようにしたいと考えています。onmessage() については、ある程度の非同期性があると思います。

WebSocket.onmessage() 経由で渡されたデータを取得し、ゲーム全体でアクセスできる変数に格納する方法を教えてください。

4

2 に答える 2

2

onMessage は、コールバック関数として非同期に起動されます。したがって、作業している変数のスコープに注意する必要があります。bind()以前の回答を検索できるプロキシ、変更されたスコープ、関数など、使用できる可能性は多数あります。(沢山あります)

簡単な例として、自己変数を使用して、他の場所でこれにアクセスできる可能性があります。ただし、明らかにこのスクリプト全体の目的に依存します。

function Game(canvas) {
    this.wArray = [];
    this.runConnection();
    console.log(this.wArray[1][2]); 
   //log()  will likely not work as you should wait for [1][2] to be filled
}

_p = new Game();

_p.runConnection = function() {
    this.connection = new WebSocket('ws://localhost:1337');
    var self = this;
    this.connection.onmessage = function (message) {
           self.wArray.push(JSON.parse(message.data));
        };
};
于 2015-07-09T02:42:57.003 に答える