1

OOP と html5 キャンバスを使用して JavaScript でゲームを作ろうとしています。一か所で立ち往生しているため、ゲームを進めることができません。私の質問は、関数から値を返す xPosition メソッドの値を変更するにはどうすればよいかということです。以下にいくつかのコードを示します。

var myObject = {
    //placing object in start position 
    xPosition : function(){
         return Canvas.width / 2;
    },
    //if keycode pressed move myObject to the left
    move : function(){
         xPosition -= 10; //I know this wont work
    }
};
4

2 に答える 2

2

xPositionメソッド自体を変更 (つまり、上書き) せずに戻り値を変更することはできません。

ただし、値を簡単に取得して変更することができます。

… move: function(){
     var xval = this.xPosition();
     xval -= 10; // this works, reassigning to the "xval" variable (xval=xval-10)

     // or in one step:
     var xval = this.xPosition() - 10;
}

または、関数の入力値を変更します。キャンバス サイズから現在の位置を計算し、変数 (またはより簡単にはプロパティ) に保存されている相対位置を計算し、その変数/プロパティのみをmove関数から変更します。

var myObject = {
    // placing object in start position
    xPos: 0,
    getXPosition: function() { // compute value from canvas and position
         return Canvas.width / 2 + this.xPos; // or something similar
    },
    move : function() {
         // change relative position
         this.xPos -= 10;
    }
};
于 2013-02-05T09:47:00.723 に答える
1

オブジェクトの正しいスコープを参照する必要があります。this キーワードは myObject スコープを参照します。

関数も呼び出しているため、括弧を追加する必要があります。

あなたの他の問題は、関数を呼び出して値を更新しようとしていることです。xPosition を変数として割り当てるか、新しい値を渡す必要があります。

    move : function(){
         this.xPosition(-10); 
    }

JavaScriptの構造化に関するこれらの記事をご覧ください

  1. パート1
  2. パート2
  3. パート3
  4. パート 4

x、y 位置を扱っていて、ゲームを作成している場合、ベクトルを使用してゲーム オブジェクトを管理します。vecotr ライブラリがすべての計算を処理します。足し算、引き算、掛け算など。

ベクター ライブラリはたくさんありますが、独自に作成することもできます。 ベクトル演算

于 2013-02-05T09:26:11.403 に答える