JavaScript: ошибка функции applyForce - PullRequest
0 голосов
/ 21 мая 2018

Это из проекта Khanacademy - мне было интересно, почему, когда я пытаюсь применить силу отталкивания от моего прожектора к каждому из мух, почему он возвращает __env__.flies[j].applyForce is not a function.

Я возился с этим и не могу заставить его принять эту силу.Также, когда я пытаюсь изменить свечение фонаря в этой функции, добавив величину, а затем удалив величину, похоже, что она происходит слишком быстро, потому что она показывает только максимальную величину свечения.

CODE:

// Я создал источник света над тем местом, где находится мышь, и мухи (случайные стартовые позиции) обращены к источнику света, но я добавил некоторую случайность в их движения, чтобы добавить немногоизменяя их пути, мухи отталкиваются от фонаря, используя силу отталкивания:

var Mover = function() {
    this.position = new PVector (random(width),random(height));
    this.velocity = new PVector (0,0);
    this.acceleration = new PVector (0,0);
    this.mass = 1;
};

Mover.prototype.update = function () {
    var mouse = new PVector(mouseX,mouseY); 
    var dist = PVector.sub(mouse, this.position);
    var randomPush = new PVector(random(-1,1),random(-1,1));
    dist.normalize();
    dist.mult(0.4);
    this.acceleration = dist;
    this.acceleration.add(randomPush);
    this.velocity.add(this.acceleration);
    this.velocity.limit(9);
    this.position.add(this.velocity);
};

Mover.prototype.display = function () {
    strokeWeight(7);
    stroke(0, 0, 0);
    point(this.position.x,this.position.y);
    strokeWeight(5);
    point(this.position.x - 3,this.position.y -3);
    point(this.position.x + 3,this.position.y -3);
};

var Buglight = function (){
    this.position = new PVector (random(width-50),random(height-80));
    this.velocity = new PVector (0,0);
    this.acceleration = new PVector (0,0);
    this.glow = 70;
    this.mass = 20;
    this.G = 1;
};

Buglight.prototype.update = function() {
    noStroke();
    fill(39, 131, 207,90);
    ellipse(this.position.x+20,this.position.y+35,this.glow,this.glow);
};

Buglight.prototype.repulsion = function(fly) {
    var force = PVector.sub(this.position,fly.position);
    var distance = force.mag();
    distance = constrain(distance, 4.0, 20.0);
    force.normalize();
    var strength = -1 *(this.G * this.mass * fly.mass) / (distance * distance);
    force.mult(strength);
    return force;

};

Buglight.prototype.display = function() {
    noStroke();
    fill(5, 170, 252);
    rect(this.position.x+15,this.position.y,10,60);
    fill(0, 0, 0);
    noStroke();
    rect(this.position.x-10,this.position.y+60,60,10,10);
    rect(this.position.x,this.position.y,10,60);
    rect(this.position.x+30,this.position.y,10,60    );
    quad(this.position.x,this.position.y,
    this.position.x-10,this.position.y+20,
    this.position.x+50,this.position.y+20,
    this.position.x+40,this.position.y);

};

Buglight.prototype.checkEdges = function () {

};

var flies = [];
for (var i = 0; i < 4; i++){
    flies[i] = new Mover();
}
var buglight = new Buglight();
var fly = new Mover();

draw = function() {
    background(71, 71, 71);
    strokeWeight(56);
    stroke(219, 247, 8,100);
    fill(255, 238, 0);
    ellipse(mouseX,mouseY,20,20);
    buglight.update();
    buglight.display();

    for (var j = 0; j < flies.length; j++) {
        var blueForce = buglight.repulsion(flies[j]);

        flies[j].applyForce(blueForce); 
        flies[j].update();

        flies[j].display(); 
    }
};

1 Ответ

0 голосов
/ 21 мая 2018

В вашем классе Mover нет функции applyForce.Чего-то не хватает, я чувствую.

...