2012-04-29 17 views
0

私はHTML5で簡単なゲームを作る方法についてはthis tutorialに従っていますが、私が理解できないパラメータの興味深い使い方を知りました...ここでは、パラメータ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

おかげで、しかし、右、私はtehの質問に投稿されたコードのブロックの前には、次の言う:「次は、私たちが必要弾丸のインスタンスを作成するコンストラクタです。だから、それはどのようにコンストラクタではありませんか? –

+0

@ErickMaynard "instances"を作成した場合は、 'new'キーワードを使用していたはずです。コンストラクタ関数からインスタンスを生成すると、 'var test = new ConstructorName()'のように呼び出されます。これは後でオブジェクトを返し、 'test'にそれを格納します。しかし、このチュートリアルでは、そうではありません。それは単に既存のオブジェクトを取り込み、それを補強して返します。作成されたインスタンスはありませんでした。 – Joseph

+0

私はまだ混乱していると思います。それは最終的にキャンバス内のスクリーンに「弾」を描く。弾丸のインスタンスを作成しない場合、これはどうしていますか? –

関連する問題