私は現在 Javascript でマルチプレイヤー ゲームに取り組んでおり、PlayerList データ構造/オブジェクトに非常に特有の問題があるようです。
オブジェクトは次のとおりです。
var PlayerList = function(){
this.list = {};
}
オブジェクトには、私が実行して追加したいくつかのメソッドがあります...
PlayerList.prototype.method = function(){...}
メソッドは、addPlayer、removePlayer、playerInList、findPlayer、jsonify、および unjsonify です。unjsonifyに大きな問題があります。コードは次のとおりです。
PlayerList.prototype.unjsonify = function(jsonList){
var object = JSON.parse(jsonList);
var li = new PlayerList();
console.log(li.list.x);
console.log(li.list.y);
console.log(li.list);
//insert the fake player objects from the fake list into the new list as real player objects
for(p in object.list){
var pObj = object.list[p];
//create real player object
var player = new Player(pObj.name, pObj.x, pObj.y, pObj.velX, pObj.velY);
li.addPlayer(player);
}
return li;
}
このようにする理由は、サーバーから送信された jsonList オブジェクトを解析すると、結果のオブジェクトは正しい構造を持ちますが、PlayerList が持つべきメソッドがないためです。
問題は次のとおりです。あとで気付きましたが、PlayerList.list を調べて各プレイヤーを描画すると、次のエラーが発生します。
キャッチされていない TypeError: オブジェクト NaN にはメソッド 'getX' がありません
結局のところ、 unjsonifyで新しい PlayerList を作成すると、何らかの理由で x と y の 2 つの追加フィールドがあり、どちらもNaNに設定されていました。ここで問題が発生します。
PlayerList.prototype.unjsonify = function(jsonList){
var object = JSON.parse(jsonList);
var li = new PlayerList();
非常に奇妙な理由で、li は本来あるべき新しい空の PlayerList ではありません。これには、2 つの追加変数 x と y が含まれており、どちらもNaNに設定されています。さらに奇妙なことに、それは新しい空のリストではないだけでなく、現在サーバー上にあるすべてのプレーヤーが含まれています.クライアントがjsonプレーヤーリストを含むパッケージを初めて取得したときに、それさえないため、私には不可能に思えます.それ自体の過去のバージョンを持っています。
さらに、 unjsonifyのコード ブロックを見ると、console.log(li.list.x) と console.log(li.list.y) の両方がundefinedを出力しますが、console.log(li.list ) (サーバー上のすべてのプレイヤーに加えて) フィールド x と y が NaN に設定されたオブジェクトを出力します。
これがどのように起こるかについて、私は完全に迷っています。意味をなさないため、誰も解決できなかったこれらのバグの 1 つに思えます。しかし、誰かが私を助ける方法について少しでもアイデアを持っていれば、それは大歓迎です!
この PlayerList オブジェクトを作成する前は、メソッドを使用せずに単純にオブジェクト プリミティブを使用し、すべてを手動で行っていたことに注意してください (たとえば、pList.username = player でプレーヤーを追加するなど...)。しかし、これはこの時点でかなり大きくなっているので、何らかの構造を追加したかったので、この PlayerList オブジェクトを作成しました。これにより、コードがより構造化され、きれいになりますが、これまでのところ、何よりも多くの問題が発生しています.