2016-11-13 3 views
1

私はJavascriptには比較的新しいので、私が取り組んでいるゲームタイプのプロジェクトのための非常に単純な物理エンジンを作成しようとしています。これを行うために、私は自分が望むオブジェクトごとに新しいコピーを作成することができるJSの同等のクラスであると理解しました。問題は、私はx位置などの値を更新できるようにしたいし、x Middleの位置(x画面上のオブジェクトの中心)なども更新したいということです。私はオブジェクトリテラルとゲッターを使用することでこれが可能であることは知っていますが、画面上のものに基づいてリアルタイムで新しいオブジェクトを作成できるようにしたいと思います。ここで私が何をしようとしています何の一般的な考えだ:他のプロパティに基づいてJS "クラス"のプロパティを更新しますか?

var object = function (xPos, yPos, width, height) { 
    this.xPos = xPos; 
    this.yPos = yPos; 
    function getXMid (xP) { return xP + width/2; } 
    this.xMid = getXMid (this.xPos); 
    function getYMid (yP) { return yP + height/2; } 
    this.yMid = getYMid (this.yPos); 
} 

var ball = new object (10, 20, 50, 50); 
ball.xPos = 50; 
console.log (ball.xMid); // want this to output 75 instead of 45 

答えて

0

あなたは一つの特性を変更し、更新するための他のプロパティを期待しているプロパティは、プリミティブ値を保持する場合、残念ながらそれはそのように動作しません。

あなたが値にこれが動作しているようです

var object = function(xPos, yPos, width, height) { 
 
    this._xPos = xPos; 
 
    this._yPos = yPos; 
 
    this.recalc = function() { 
 
    \t this.xMid = getXMid(this.xPos); 
 
     this.yMid = getYMid(this.yPos); 
 
    } 
 
    
 
    Object.defineProperty(this, 'xPos', { 
 
     get: function() { 
 
      return this._xPos; 
 
     }, 
 
     set: function(v) { 
 
     \t this._xPos = v; 
 
     \t this.recalc(); 
 
     } 
 
    }); 
 

 
\t Object.defineProperty(this, 'yPos', { 
 
     get: function() { 
 
      return this._yPos; 
 
     }, 
 
     set: function(v) { 
 
     \t this._yPos = v; 
 
     \t this.recalc(); 
 
     } 
 
    }); 
 
    
 
    function getXMid(xP) { return xP + width/2; } 
 
    
 
    function getYMid(yP) { return yP + height/2; } 
 
    
 
    this.recalc(); 
 
} 
 

 
var ball = new object(10, 20, 50, 50); 
 
ball.xPos = 50; 
 
console.log (ball.xMid); // want this to output 75 instead of 45

+0

感謝を設定するときは、他のプロパティを更新するために、セッターとゲッターと機能を使用することができます!私はセッターがいかに正確に動作するか少し混乱しています。使用するvパラメータはどこから来ますか? –

+0

setterが取得する唯一の引数は設定された値なので、 'v'は' this.xPos = *** 'を – adeneo

関連する問題