2011-12-16 4 views
3

Что это будет выглядеть в UnityScript?UnityScript эквивалент этого фрагмента C#

void playerDataLoaded(List<GameCenterPlayer> players) 
{ 
    foreach(GameCenterPlayer p in players) 
    // do something with p 
} 

Игроки - это список не массива.

Я пытаюсь обработать ответ от Apple GameCenter, который возвращает список атрибутов plater. Эти ошибки:

"длина не является членом объекта игрока"

"Тип 'Объект' (игрок) не поддерживает нарезка"

Использует IOS Game Center, Unity , и плагин Prime31 GameCenter.

ответ

5
function removePlayersDataLoaded(players){ 
    for(var i = 0; i < players.length; i++){ 
    var p = players[i]; 
    // do something with p 
    } 
} 
+0

Это ничего не стоит, что это правильно, потому что JavaScript не имеет хороший 'foreach' замены. Использование 'for (var p in players)' [не рекомендуется, потому что оно дает непоследовательные результаты] (http://stackoverflow.com/a/243778/272072). –

+0

Это может быть правильным для общего случая, но мой конкретный случай (который я, вероятно, должен был уточнить, так, мой плохой), он не работает. – user1001828

+0

Не зная, что такое «игроки», мы не можем ответить на вопрос. В вашем вопросе говорится, что это массив; если у него нет свойства .length, то это не тот случай ... – jvenema

0

Было бы что-то вроде:

var remotePlayersDataLoaded = function(players) { 
    for (var i = 0; i < players.length; i++) { 
    var player = players[i]; 
    } 
}; 
0

Использование .forEach для вызова итератор для каждого члена в списке

function removePlayersDataLoaded(players) { 
    players.forEach(doSomethingWithPlayer); 

    function doSomethingWithPlayer(p) { 
     // code 
    } 
} 

Или используя for цикл по массиву

function removePlayersDataLoaded(players) { 
    for (var i = 0, len = players.length; i < len; i++) { 
     var p = players[i]; 
     // code 
    } 
} 
+0

Приятно отметить, что поддержка 'foreach' в IE довольно ужасная. –

+0

Да 'forEach' не поддерживается устаревшими браузерами, можно использовать прокладку для эмуляции. – Raynos

-2

Я считаю, что это что-то вроде этого:

function remotePlayersDataLoaded(players) { 
for (p in players) 
    { 
    // do your thing with p 
    } 
} 

Может быть ошибочно, однако, она жалуется?

+0

Неправильный синтаксис, пожалуйста, проверьте перед публикацией: \ – Raynos

+0

что с этим случилось? – YahooMania

+0

Вы исправили синтаксис, код по-прежнему полон анти-шаблонов – Raynos

0

В то время как C# 's Список <> не тождественна ниже, что-то вроде этого

function Player(playerName, gameCenterPlayer) 
{ 
    this.playerName = playerName; 
    this.GameCenterPlayer = gameCenterPlayer; // i'm going to assume this has been calculated elsewhere, and all we need now is a boolean. 
} 

function playerDataLoaded(players) { 
    this.players = players 
    this.getCenterPlayer = function() { 
var i = 0 
    while (i < players.length) { 
    if (players[i].GameCenterPlayer) { 
console.log(players[i].playerName + " is the center player!"); 
} 
i++; 
} 
} 

} 

var player1 = new Player("Ted", 0); 
var player2 = new Player("Jane", 1); 
var player3 = new Player("Doug", 0); 
Players = new playerDataLoaded([player1, player2, player3]); 

Players.getCenterPlayer() 
Смежные вопросы