1

canvs を使用して JS で単純な 2D ゲームに取り組んでいます。

このゲームは、ゴブリンを殺すために走り回る騎士で構成されており、ゴブリンは一度触れた後、ランダムな場所にリセットされます。ゴブリンを倒すたびに血しぶきを残したい。

現在、キャンバスを再描画する前に、ゴブリンが死亡した場所の以前の X 座標と Y 座標を使用して、血しぶきの画像をペイントしています。

ゴブリン全部やりたいけど。Java のような伝統的な言語では、型を定義します。たとえば、X と Y の 2 つのプロパティを持つ「blood」などです。

次に、ゴブリンの現在の座標を使用して各ラウンドでこのタイプの新しいインスタンスを作成し、このタイプを配列に追加します。次に、この配列内のすべてのオブジェクトをループして出力します。

私は JS を初めて使用しますが、JS は関数型言語であるため、状況は少し異なります。ゲームの反復ごとに配列に「新規作成」できるこのような型を正確に定義するにはどうすればよいでしょうか?

var blood = {
    x: 0,
    y: 0        
};

これが私が持っている現在の血液オブジェクトです

4

1 に答える 1

1

Javascript で「クラス」を関数として作成します。this.x関数内で使用することは、次の名前のメンバー変数を作成するようなものxです。

var Blood = function() {
    this.x = 0;
    this.y = 0;
}
var blood = new Blood()
console.log(blood.x);

これらは、Java のような OO 言語の意味でのクラスや型ではなく、Javascript のスコープ規則を使用してそれらを模倣する方法にすぎません。

これまでのところ、ここではあまり役に立ちません。単純なオブジェクト マップでも同様に機能します。しかし、このアプローチは、メンバー関数など、Blood の "クラス" にさらにロジックが必要な場合に役立ちます。オブジェクトのプロトタイプを変更して作成します。

Blood.prototype.createSplatter = function() {
    return [this.x-1, this.y+1]; // (idk, however you create a splatter)
};
blood.createSplatter();

(フィドル)

Javascript クラスの詳細については、CoffeeScript 構文を参照することをお勧めします(「クラス、継承、およびスーパー」まで下にスクロールします)。簡略化された CS 構文と JS 変換のクラスの例がいくつか並んでいます。

于 2013-10-16T17:51:05.057 に答える