2011-11-13 64 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(); 

然後再嘗試執行此操作。