2012-04-29 63 views
0

我一直在關注如何使一個簡單的遊戲在HTML5 this tutorial,和我遇到了一個有趣的使用參數,我無法理解......這裏來了筆者創建了一個名爲子彈有一個構造函數參數I,但看他如何使用I.這裏發生了什麼?我不明白:JavaScript構造參數

function Bullet(I) { 
    I.active = true; 

    I.xVelocity = 0; 
    I.yVelocity = -I.speed; 
    I.width = 3; 
    I.height = 3; 
    I.color = "#000"; 

    I.inBounds = function() { 
     return I.x >= 0 && I.x <= CANVAS_WIDTH && 
     I.y >= 0 && I.y <= CANVAS_HEIGHT; 
    }; 

    I.draw = function() { 
     canvas.fillStyle = this.color; 
     canvas.fillRect(this.x, this.y, this.width, this.height); 
    }; 

    I.update = function() { 
     I.x += I.xVelocity; 
     I.y += I.yVelocity; 
    }; 

    return I; 
} 

回答

2

根據該教程,Bullet不是構造函數,只是一個函數,現有的對象,墊片(追加)屬性和返回對象回來。然後它將返回的對象(具有附加屬性)放到​​數組中。

playerBullets.push(Bullet({ //the Bullet call, passing an object 
    speed: 5, 
    x: bulletPosition.x, 
    y: bulletPosition.y 
})) 

Bullet返回的對象將是這樣的:

{ 
    //the passed object 
    x:..., 
    y:..., 
    speed:..., 
    //the added properties 
    xVelocity:..., 
    yVelocity:..., 
    ..., 
    update:function(){...} 
} 
+0

感謝您的幫助,但我張貼在格蘭問題的代碼塊前右它說以下內容:「接下來,我們需要一個構造函數來創建子彈實例。「那麼它怎麼不是一個構造函數呢? – 2012-04-29 00:21:03

+0

@ErickMaynard如果它創建了「實例」,那麼它應該使用'new'關鍵字。使用構造函數創建實例,就像'var test = new ConstructorName()'一樣調用它。這之後返回一個對象並將其存儲到'test'中。但在該教程中,事實並非如此。它只需要一個現有的對象,對它進行擴充並將其返回。沒有創建實例。 – Joseph 2012-04-29 00:27:20

+0

我想我仍然困惑。它最終在畫布上畫出一個「子彈」。它如何做到這一點,如果它從來沒有創建子彈的實例? – 2012-04-29 00:42:12