this.groups[this.matrix[y][x]].push(x, y);
вынес в цикл, который в calc.
Я не могу понять. Почему если я в my_data закину объект, то все работает как надо.
Меня устроит любой даже блокирующий вариант.
this.ctx.fillStyle = this.memory[y][x] === 0 ? '#0d2a37': '#CCC';
memory[y][x] === 0 ? бла-бла-бла
(и почему memory, а не matrix? - отрисовывать надо новое состояние, а не прошлое)? Неужели количество доступных состояний у вас ограничено всего лишь двумя? А как же картинка из вопроса, где есть клетки в шести различных состояниях? Лучше сделайте объект, где ключ - состояние, а значение - цвет:var colors = {
0: какой-то цвет,
1: ещё какой-то цвет,
2: и ещё,
3: да сколько угодно,
...
};
this.ctx.fillStyle = colors[this.matrix[y][x]];
var groups = [...Array(numCellStates)].map(() => []);
groups[this.matrix[y][x]].push(x, y);
for (var state = 0; state < groups.length; state++) {
this.ctx.fillStyle = colors[state];
var cells = groups[state];
for (var i = 0; i < cells.length; i += 2) {
this.ctx.fillRect(cells[i] * this.coefX, cells[i + 1] * this.coefY, this.coefX, this.coefY);
}
}
Рисовать только "живые" клетки на "мертвом" фоне.
Рисовать только изменившиеся клетки.
Есть еще идеи?
Попробую канвас, но пока-что replace быстрее всего
<button @click="$emit('show-next', 0)">1</button>
<button @click="$emit('show-next', 1)">2</button>
...