Многомерный массив PaperJS

Я создал круг с помощью paperJS, теперь я собираюсь применить параметр отмены для созданных кругов. Итак, как я могу сохранить Point {x: 537, y: 157} (это event.point в paperjs) в массив.


person chiyango    schedule 04.06.2013    source источник
comment
Вы имеете в виду, что вам нужно клонировать его?   -  person Bergi    schedule 05.06.2013
comment
Предположим, например, если я рисую 3 круга, мне нужно удалить второй круг. Как я могу это сделать? Я надеюсь, что это возможно только путем правильного хранения этих точек в массиве.   -  person chiyango    schedule 05.06.2013
comment
@Devan Если эти точки являются объектами, да, вы можете сохранить их в массиве. Обратите внимание, что значения объекта являются просто ссылками на объекты, поэтому вы можете хранить одну и ту же точку в нескольких массивах и т. д.   -  person Šime Vidas    schedule 05.06.2013
comment
@Šime Vidas, можете ли вы привести пример в этом случае?   -  person chiyango    schedule 05.06.2013
comment
@Деван: Просто someArray.push(event.point). Если ничто не изменяет точечный объект, этого будет достаточно.   -  person Bergi    schedule 05.06.2013


Ответы (1)


Если вы хотите, чтобы элементы были удалены с экрана, это не так просто, как удалить их из вашего массива, потому что они все равно будут храниться в массиве children любого слоя, который был активен при их создании (project.activeLayer, если вы не меняли слои ).

Следующий код создает три круга разных цветов, сохраняет их в массиве, затем объединяет второй круг из массива и, наконец, удаляет его из представления (jsbin здесь):

<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
  <script type="text/javascript" src="https://raw.github.com/paperjs/paper.js/master/dist/paper.js"></script>
  <script type="text/paperscript" canvas="p">
    var circleArray = [];
    circleArray.push(new Path.Circle({
        center: [20, 20],
        radius: 10,
        strokeColor: 'red'
        }));
    circleArray.push(new Path.Circle({
        center: [30, 30],
        radius: 10,
        strokeColor: 'green'
        }));
    circleArray.push(new Path.Circle({
        center: [40, 40],
        radius: 10,
        strokeColor: 'blue'
        }));
    var idOfItemToRemove = 1;
    var numberOfItemsToRemove = 1;
    var removeItems = circleArray.splice(idOfItemToRemove, numberOfItemsToRemove);
    for (var i = 0; i < removeItems.length; i++) {
        removeItems[i].remove();
    }
  </script>
</head>
<body>
  <canvas id="p" resize></canvas>
</body>
</html>
person beaslera    schedule 04.08.2013
comment
The bin does not seem to work anymore so I created a эскиз - person Christoph; 28.01.2014