Вы делаете это неправильно. mousePressed()
является обратным вызовом события. Он вызывается системой. Никогда не звоните прямо. При нажатии мыши вызывается функция обратного вызова события mousPressed()
.
Добавить метод к классу Switch
, который опрокидывает кнопку:
class Switch {
// [...]
switchState() {
if (this.intersect()) {
this.status = !this.status;
this.statusColour = this.status ? 'black' : 'green';
}
}
// [...]
}
Делегировать обратный вызов мыши к этому методу:
function mousePressed(status) {
s.switchState();
}
См. пример:
let s;
function setup() {
createCanvas(400, 400);
background('gray');
s = new Switch(100,100);
}
function draw() {
s.draw();
}
function mousePressed(status) {
s.switchState();
}
class Switch {
constructor(x,y) {
this.status = true;
this.statusColour = 'black';
this.pos = createVector(x,y);
this.size = 100;
}
intersect() {
return mouseX >= this.pos.x && mouseX <= this.pos.x+this.size && mouseY >= this.pos.y && mouseY <= this.pos.y+this.size;
}
switchState() {
if (this.intersect()) {
this.status = !this.status;
this.statusColour = this.status ? 'black' : 'green';
}
}
draw() {
noStroke();
fill(this.statusColour);
rect(this.pos.x,this.pos.y,this.size,this.size);
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>