无法读取undefined的属性 - p5js

时间:2016-12-12 19:56:34

标签: javascript html canvas

我正在做一个简单的扫雷游戏。我正在使用p5js,我不断收到此错误。 ## Uncaught TypeError:无法读取属性' isMine' of undefined(...)sketch.js:34 ##。

sketch.js -

var cells = [];

function createCells() {
    var x = 0;
    var y = 0;

    for(var i = 0; i < 100; i++) {
        cells[i] = new Cell(x, y, 255);
        x += 50;

        if(x >= 500) {
            y += 50;
            x = 0;
        }
    }
}

function setup() {
    createCanvas(501, 501);
    frameRate(60);

    createCells();

    for(var i = 0; i < 5; i++) {
        var rd = random(cells);
        if(!cells[rd].isMine()) {
            cells[rd].setMine();
        } else {
            i--;
        }
    }
}

function draw() {
    background(50);

    for(var i = 0; i < cells.length; i++) {
        cells[i].show();
    }
}

function mousePressed() {
    for(var i = 0; i < cells.length; i++) {
        if(mouseX < cells[i].x + cells[i].w && mouseX > cells[i].x) {
            if(mouseY < cells[i].y + cells[i].h && mouseY > cells[i].y) {
                if(!cells[i].mine) {
                    cells[i].cOlor = 'rgb(0, 153, 0)';
                }
            }
        }
    }
}

cell.js -

function Cell(x, y, cOlor) {
    this.w = 50;
    this.h = 50;
    this.x = x;
    this.y = y;
    this.cOlor = cOlor;
    this.mine = false;

    this.setMine = function() {
        this.mine = true;
    }

    this.isMine = function() {
        return this.mine;
    }

    this.show = function() {
        fill(this.cOlor);
        stroke(0);
        rect(this.x, this.y, this.w, this.h);
    }
}

感谢提前寻求帮助。 :)

2 个答案:

答案 0 :(得分:1)

random(cells)返回数组的元素(Cell对象),而不是索引。 所以试试这个:

for(var i = 0; i < 5; i++) {
    var cellRandom = random(cells);
    if(!cellRandom.isMine()) {
        cellRandom.setMine();
    } else {
        i--;
    }
}

请参阅https://p5js.org/reference/#/p5/random

答案 1 :(得分:0)

要获取随机索引,可以使用数组的长度并将其下限以获取整数,如下所示:

var rd = floor(random(cells.length));

希望有帮助