2017-08-14 1 views
0

Also ich baue ein Spiel in drei js und versuche, es multiplayer durch socket.io zu machen, so dass ich alle meine Charaktere in ein Array namens Spieler auf meinem Server geladen werde SeiteVariable wird nicht definiert, obwohl der Code funktioniert woanders

und dann i übergeben es an jeden Kunden, wenn sie wie so

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

und auf meinem Client syncPlayers verbinden wie folgt aussieht

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

dann ca lls diese wich sendet die Serverdaten

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

dann diese aufgerufen wird, und sie abgerufen der Spielername und die Daten der Spieler Lage dies waren mein Problem liegt

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

Ich erhalte Uncaught TypeError: Cannot read property 'position' of undefined

obwohl kann ich dieses verwenden

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 ein Objekt

var threeObjects = {}; 

kann jemand bitte erklären, warum wird nicht funktioniert und wie man es beheben

Antwort

0

Sie this Antwort lesen kann den Unterschied zwischen Punkt und Klammern Notation zu verstehen.

Sie erhalten einen Fehler, weil tomove scheinbar undefiniert ist und die Punktnotation einen Fehler auslöst, wenn ein neuer Benutzer beitritt und das Objekt leer ist.

Überprüfen Sie, ob dies hilft. Dadurch wird der Objektschlüssel als Benutzernamen und Position als Wert zuweisen, die Anordnung so sein wird, {"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

ich meine Funktion mit Ihnen ersetzt und leider didnt es? –

Verwandte Themen