Я сделал своего рода приложение для рисования в p5js - у меня есть многомерный массив с именем points
, который состоит из фигур, которые имеют координаты x, y для точек фигур. Итак:
shapes[0][0] = [10,10]
shapes[1][3] = [47,98]
и т.д.
У меня есть функция mousePressed. В то время, когда мышь нажата, прежде чем манипулировать точками этих фигур, я хочу сохранить исходный массив фигур как undoArr
.
Затем, когда пользователь перетаскивает мышь, координаты в массиве фигур обновляются. Если пользователь затем решает отменить, у меня есть функция keyPressed
, которую я хочу иметь возможность заполнять массив shapes
значениями undoArr
.
Но что бы я ни пытался - кажется, что массив отмены и массив фигур всегда имеют одинаковые значения, что странно, потому что, если я записываю состояние координаты в массиве фигур:
function mousePressed() {
if (!isMousePressed){
undoArr = [...shapes]; //define undoArr as the current shapes array
console.log(shapes[0][0]); //outputs 10,41 (for example)
и затем зарегистрируйте состояние на mouseReleased
:
function handleMouseReleased(){
console.log(shapes[0][0]); //outputs 69,122 (for example)
Я могу убедиться, что они имеют разные значения в начале и в конце. И я могу проверить из журналов, что mousePressed случайно не запускается каким-либо образом, когда не следует, и то же самое для mouseReleased.
P5js имеет функцию рисования, которая постоянно перемещает точки массива shapes
в зависимости от того, куда пользователь перетаскивает их мышью. И в этой функции отрисовки я могу поместить инструкцию log и убедиться, что она срабатывает после mousePressed
и до mouseReleased
.
Однако, если я пытаюсь сохранить значения массива фигур в mousePressed, undoArr = [...shapes]
, а затем в keyPressed, попробуйте заполнить массив shapes
содержимым undoArr
, он ничего не сделает, потому что каким-то образом undoArr
всегда содержит те же данные, что и shapes
.
Неправильно ли я копирую массив? Я попытался вместо распространения undoArr = shapes.slice()
, но это тоже не сработало. Я даже пытался сначала очистить массив, но, похоже, ничего не работает.
A полный текст файла доступен здесь.