2017-08-14 42 views
0

所以我在三個js中構建了一個遊戲,並試圖通過socket.io使它成爲多人遊戲,所以我將所有的角色都加載到我的服務器上的一個叫做玩家的數組中側儘管代碼可以工作,但變量還沒有定義

,然後我把它傳遞給每一個客戶端連接時,像這樣

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看起來像這樣

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) 
     } 
    }); 
}) 

那麼CA 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; 
} 

BTW IH AVE對象

var threeObjects = {}; 

有人可以解釋爲什麼它不會工作,以及如何解決它

回答

0

您可以閱讀this答案,瞭解點和支架符號之間的區別。

您會收到錯誤消息,因爲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

我代替我與你的功能,遺憾的是它沒有工作? –

相關問題