2017-05-13 13 views
0

私はp5.jsを使用しており、小さなオブジェクトに対してコンストラクタ関数を作成しています。 これらのオブジェクトのリストを更新しようとすると、すべてが非常に奇妙な方法で他のオブジェクトに影響を与え始めます。それはなぜそれのように振る舞うのですか?Javascript/p5.js変数の問題

ここに私のスケッチの簡易版である:

var pellets = [], 
    cells = [] 

function setup() { 
    createCanvas(400, 300) 
    // ... 

    for (var i = 0; i < 3; i++) { 
     var pos = createVector(random(width), random(height)) 
     var col = color("#ff0000") 
     cells.push(new Bot(pos, col, pelletMiddle)) 
    } 

    // ... 
} 

function draw() { 
    for (var i in pellets) { 
     cells[i].update() 
     cells[i].draw() 
    } 
} 

そしてここでは、コンストラクタ関数である:

function Bot(position, col, mass) { 
    //private: 
    position = position.copy() 
    var velocity = createVector() 
    var acceleration = createVector() 

    //public: 
    this.nearby = [] 
    this.draw = function() { 
     fill(col) 
     ellipse(position.x, position.y, mass) 
    } 

    this.getPosition = function() { 
     return position.copy() 
    } 

    this.getDistance = function (vector) { 
     return position.dist(vector) 
    } 

    this.update = function() { 
     position.add(velocity) 
     velocity.add(acceleration).limit(5) 

     var pos = createVector(), 
      dist = Infinity 
     for (var i in pellets) { 
      var lpos = pellets[i].getPosition() 
      if (this.getDistance(lpos) < dist) { 
       dist = this.getDistance(lpos) 
       pos = lpos 
      } 
     } 
     acceleration = pos.sub(position).limit(random(0.5)) 
    } 
} 
+0

オブジェクトが互いに影響を及ぼしていると言うよりも、少し具体的にすることはできますか?このコードは正確に何をしていますか?また、 'position'、' velocity'、 'acceleration'関数はどこに定義されていますか? –

+0

私は引数から位置を得て、すべての変数はp5.Vectorsです([p5.jsリファレンス](https://p5js.org/reference/#/p5/createVector)を参照))。加速度が変化しないことを確認しても、オブジェクトは揺れ始めてターゲットに到達しません。すべての単一のBotからの加速が他のすべてのBotに適用されているようです)。 – gDKdev

+0

JSFiddleまたはCodePenで動作するコードへのリンクを投稿できますか? –

答えて

0

私は問題を発見した時間のカップルの周りいじりの後...私は velocityaccelerationの前には、varがありませんでした。

したがって、velocityaccelerationはグローバル変数に過ぎませんでした。