2017-05-13 95 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

你能說比對象相互影響更具體嗎?這段代碼究竟做了什麼?此外,定義了「位置」,「速度」和「加速度」函數在哪裏? –

+0

那麼我從參數中獲得位置,所有的變量都是p5.Vectors(參見[p5.js參考](https://p5js.org/reference/#/p5/createVector))。即使我確定加速度沒有變化,對象也開始搖擺,永遠不會到達目標。似乎來自每一個Bot的加速度都被應用於其他Bot)。 – gDKdev

+0

你可以發佈一個鏈接到JSFiddle或CodePen中運行的代碼嗎? –

回答

0

周圍幾個小時擺弄之後,我發現這個問題......我 在velocityacceleration之前缺少var

所以velocityacceleration只是全局變量。