【发布时间】:2014-09-03 18:18:39
【问题描述】:
我正在使用节点 js 和套接字 IO 创建游戏。
我正在创建如下播放器
var player = new playa.playa();
player.name = info.name;
player.picture = info.picture;
player.email = info.email;
player.user_id = info.user_id;
player.socket = socket;
然后我将播放器添加到我的数组中
playerPool[info.user_id] = player;
已映射,因此我可以引用 playerPool[user_Id] 而无需遍历循环
然后我想将我的播放器添加到我的游戏中
g.addPlayer(playerPool[info.user_id]);
this.addPlayer = function(player)
{
var self = this;
if(this.max_players > this.current_players.length)
{
self.current_players[player_userid] =player;
}
}
但是,我不断收到错误
for(var key in obj) RangeError max call stack size exceeded
我的问题是
- 为什么 JavaScript 循环遍历我的键?
如果我打电话
player.user_id
它返回播放器类的用户ID,所以我知道它是一个有效的对象。
我从未要求 JavaScript 遍历对象,只需将其重新映射到游戏类中的玩家数组,就像我对玩家池所做的那样。然而,这似乎是一个问题。有没有人遇到过同样的问题?
【问题讨论】:
-
playPool 数组是如何声明的?
-
首先我看到 current_player 是一个没有长度的对象,除非你分配 current_player=[] 但是如果你以这种方式初始化 current_player[user_id] 其中用户 id = 50 将自动创建 50 个值这将使长度为 50
-
@Huangism var playerPool = [];那不是问题。我能够传递玩家对象,甚至可以在游戏类中提取其属性。问题是“玩家”对象不能分配给 self.current_players 这是一个类范围 var this.current_players = []
-
@Sunand 我明白了.. 我认为这是正在发生的事情。然后我怎样才能成功地将键映射到 current_players obj。
-
将当前播放器初始化为对象 i,例如 this.current_players ={} 还维护另一个属性,比如 this.playerCount=0 并在添加播放器函数中增加它:)
标签: javascript node.js loops