I’m trying to create a test project based on Daniel Shiffman’s Game of Life. In code, I’m using the webcam to create a new matrix every 20 frames. In offline everything works fine. Someone can help why this code does not work in P5.js editor?
sketch.js:
var video;
var vScale = 10;
var slider;
var counter = 0;
var ca;
function setup() {
	createCanvas(640, 480);
        background(255);
    pixelDensity(1);
    video = createCapture(VIDEO);
    video.size(width/vScale, height/vScale);
    //vide.hide(); // hide DOM element
    //slider = createSlider(0, 255, 127);
    ca = new CA(vScale);
    ca.threshold = 200;
    
   
}
function draw() {
    if (counter == 10){
        ca.getStates(video);
        counter = 0;
    }
    
    ca.display();
    ca.compute();
   counter++;
}
    
And CA.js Class
class CA {
    
    constructor(_resolution){
        this.resolution = _resolution;
        this.threshold = 255;
        this.onColor = 0;
        this.ofColor = 255;
        this.cols = floor(width/this.resolution);
        this.rows = floor(height/this.resolution);
        this.grid = this.make2dArray(this.cols,this.rows);
        this.restart();
        
    }
    
    restart(){
        for (let i = 0; i<this.cols; i++){
            for (let j = 0; j<this.rows; j++){
                this.grid[i][j] = floor(random(2));
            }
        }
    }
    
    getStates(videoBuffer){
        videoBuffer.loadPixels();
        for (var y = 0; y < videoBuffer.height; y++){
            for (var x = 0; x < videoBuffer.width; x++) {
                var index = (videoBuffer.width - x + 1 + (y * videoBuffer.width))*4; // mirror version
                var r = videoBuffer.pixels[index];
                var g = videoBuffer.pixels[index+1];
                var b = videoBuffer.pixels[index+2];
                var bright = (r+g+b)/3;
                if (bright < this.threshold){
                    this.grid[x][y] = 0;
                } else {
                    this.grid[x][y] = 1;
                }
            }
        }
    }
    make2dArray(cols, rows){
        var arr = new Array(cols);
        for (var i = 0; i < arr.length; i++) {
           arr[i] = new Array(rows);
        }
        return arr;
    } 
    
    display(){
        for (let i = 0; i<this.cols; i++){
            for (let j = 0; j<this.rows; j++){
                let x = i * this.resolution;
                let y = j * this.resolution;
                
                if (this.grid[i][j] == 1) {
                    fill(this.onColor);
                } else {
                    fill(this.ofColor);
                }
                stroke(this.onColor);
            rect(x,y,this.resolution-1,this.resolution-1);
            }
        }
    }
    
    compute(){
        let nextGrid = this.make2dArray(this.cols, this.rows);
        for (let i = 0; i < this.cols; i++){
            for (let j = 0; j < this.rows; j++){
                let myState = this.grid[i][j];
                let neighbors = this.countNeighbors(i,j);
                if (myState == 0 && neighbors == 3)
                    {
                        nextGrid[i][j] = 1;
                    } else if (myState == 1 && (neighbors < 2 || neighbors > 3)){
                        nextGrid[i][j] = 0;
                    } else {
                        nextGrid[i][j] = myState;
                    }
            }
        }
        
        this.grid = nextGrid;
        
        
    }
    
    countNeighbors(x,y){
        let sum = 0;
        for (let i = -1; i <2; i++){
            for (let j = -1; j<2; j++){
                
                let tCol = (x+i+this.cols)%this.cols;
                let tRow = (y+j+this.rows)%this.rows;
                sum += this.grid[tCol][tRow];
            }
        }
        sum -= this.grid[x][y];
        return sum;
    }
}
Thanks for the help!!!
