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))
}
}
オブジェクトが互いに影響を及ぼしていると言うよりも、少し具体的にすることはできますか?このコードは正確に何をしていますか?また、 'position'、' velocity'、 'acceleration'関数はどこに定義されていますか? –
私は引数から位置を得て、すべての変数はp5.Vectorsです([p5.jsリファレンス](https://p5js.org/reference/#/p5/createVector)を参照))。加速度が変化しないことを確認しても、オブジェクトは揺れ始めてターゲットに到達しません。すべての単一のBotからの加速が他のすべてのBotに適用されているようです)。 – gDKdev
JSFiddleまたはCodePenで動作するコードへのリンクを投稿できますか? –