2

私は現在 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 オブジェクトを作成しました。これにより、コードがより構造化され、きれいになりますが、これまでのところ、何よりも多くの問題が発生しています.

4

1 に答える 1

0

PlayerList に .addPlay メソッドがありません。

コードで作業している間は、変数を読み取り可能な場所に名前を付ける方が簡単です。

 function PlayerList() {
                this.list = [];
         };
            //
 PlayerList.prototype.unjsonify = function (jsonList) {
          var jsonLst = JSON.parse(jsonList),
                    myPlayerList = new PlayerList(),
                    player,
                    jsonItem;
                //
      for (var i = 0; i < jsonLst.list.length; i++) {
                    jsonItem = jsonLst.list[i];
                    //
                    player = new Player(jsonItem.name, jsonItem.x, jsonItem.y, jsonItem.velX, jsonItem.velY);

                    myPlayerList.list.push(player);

                };
                return myPlayerList;
            };

Player.list をオブジェクトから配列に変更しました。

于 2012-06-04T03:07:09.717 に答える