2011-11-13 66 views
0

我正在构建一个游戏,对于我的玩家我有一个玩家类。这个类定义了他们的名字,xpos,ypos等等。在我的主循环中,我必须遍历所有当前玩家(它是多人游戏)并更新/绘制它们。无法将对象推入阵列Javascript

问题是,我不知道如何在游戏类中存储玩家。我试图在游戏类这样做:

this.players = []; 

然后:

game.players.push(new player(name)); 

但我得到这个错误:

Uncaught TypeError: object is not a function 

我一直以为我可以有对象的数组元素,但显然不是。

有人可以建议一个更好的方式来做我想做的事吗?

+0

是的,你可以。错误的原因是别的。在一个好的浏览器(Firefox,Chrome,...)中运行代码以查看错误详细信息... –

+0

'player'是一个函数吗?按照惯例,FWIW的功能应该以大写字母“Player”开头。 –

+0

@Dave构造函数,即... –

回答

0

您是否定义了玩家构造函数?

有将需要密码的地方,遵循以下格式:

function player(name) { 
     this.name = name; 

     // Initialise other members here. 
    } 
0

假设你有一个游戏,这样的播放器类,

var Game = function() { this.players = []; } 
var Player = function(name) { this.name = name; } 

你可以做

var game = new Game(); 
game.players.push(new Player("test")); 
+0

这正是我正在做的。就像,字符的字面意思。它必须是其他影响代码的东西,而Chrome会给我提供错误的线路,明天我会仔细观察。 –

+0

@MartinHoe在这种情况下,在'game.players.push(新玩家(名字));'玩家应该有一个大写的P – pradeek

0

this的上下文可能正在改变为您不期望的内容。

在你的课堂上,一定要检查this的正确值。您可能需要使用闭包来确保您正在谈论您的班级。

像这样:

var MyClass = Class.extend({ 
    myMethod: function() { 
    var self = this; 
    $('button').click(function({ 
     //in here, this is different 
     //so use self instead 
    }); 
    } 
}); 
0

想通了的家伙。我在另一个JS文件的代码中已经有了一个定义给玩家的变量。对于有此问题的任何人,请检查您是否没有任何类似的内容

var player = new player(); 

然后再尝试执行此操作。