2017-08-14 4 views
0

私は3つのjsでゲームを構築していますので、マルチプレイヤースルーsocket.ioにしようとしています。サイド変数が定義されていなくても、コードがsomhere以外でも動作します

、その後、彼らはそう

socket.on('addPlayer', function(username) { 
    players.push(username) 
    console.log(username + " joined") 
    console.log("online Users " + players) 
    socket.broadcast.emit('syncPlayers', players) 
    socket.emit('syncPlayers', players) 
}) 

のように、私のクライアントsyncPlayersに接続したときに、私は、各クライアントに渡すが、それは、CA、この

socket.on('syncPlayers', function(players) { 
    players.forEach(function(value) { 
     if (value == username) { 
      console.log("not adding " + value + " thats you ") 
      loadPlayerdata(username) 
     } else { 
      console.log("player Online " + value); 
      newplayer = value; 
      loadPlayerdata(newplayer) 
      addPlayer(newplayer) 
     } 
    }); 
}) 

のように見えますLLSこのウィッヒは

function loadPlayerdata(playerName) { 
    console.log(playerName) 
    console.log("phase1") 
    socket.emit('loadPlayerdata', playerName) 
} 

が、これはと呼ばれているサーバーのデータを送信し、それがプレイヤー名検索し、これが私の問題だったされた選手の場所のデータは、私が得続ける

socket.on('loadPlayerdata', function(data, username) { 
    toMove = threeObjects[username + "Char"] 
    if (data == "null" || "") { 
     console.log(username + " is new") 
    } else { 
     console.log(username + " Exists") 
     console.log(toMove) 
     toMove.position.set(world.spawnPointx, world.spawnPointy, world.spawnPointz) 
    } 

に位置Uncaught TypeError: Cannot read property 'position' of undefined

私はこの

function addPlayer(playerName) { 

    var charObjectName = playerName + "Char" 
    var threeObject = models.tent1.mesh.clone(); 
    scene.add(threeObject) 



    //threeObject.position.set(world.spawnPointx, world.spawnPointy, world.spawnPointz) 
    // set reference 
    threeObjects[charObjectName] = threeObject; 
} 

ところでIHを使用することができるにもかかわらず

それは文句を言わない仕事、それは

答えて

0

あなたは、ドットと括弧表記の違いを理解することがthis答えを読むことができます修正する方法なぜ

var threeObjects = {}; 

誰かが説明してくださいすることができますオブジェクトをaveの。

tomoveは未定義のようで、新しいユーザーが参加してオブジェクトが空の場合はドット表記でエラーが発生するため、エラーが発生しています。

これが役立つかどうかを確認してください。これは {"usernamechar": {"position": [x,y,z]}}

socket.on('loadPlayerdata', function(data, username) { 
    if (data == "null" || "") { 
     console.log(username + " is new") 
    } else { 
     console.log(username + " Exists") 
     threeObjects[username + "Char"]["position"] = [world.spawnPointx, world.spawnPointy, world.spawnPointz] 
    } 
} 
+0

、このような配列になります値として、ユーザー名や位置などのオブジェクトキーを割り当てます私はあなたと私の機能を置き換えると悲しげに、それは仕事をdidntの? –

関連する問題