即时通讯使用paper.js创建一个球,并尝试每次点击将其放大。

因此,我可以通过更改半径轻松地扩大面积,这是我的工作,但是它也使用段进行碰撞和物理处理等。

无论如何,当第一次创建球时,它会应用正确的线段,但是当放大时,我希望有更多的线段来补偿其尺寸。

我复制了开始时可用的代码,但在这里它适用于除1之外的所有片段,该片段在0,0产生并弄乱了圆的区域。这是代码:

balls[0].radius = Math.sqrt((balls[0].path.area + balls[0].score)/ Math.PI);

balls[0].maxVec = 15;
balls[0].numSegment = Math.floor(balls[0].radius / 3 + 2);
balls[0].boundOffset = [];
balls[0].boundOffsetBuff = [];
balls[0].sidePoints = [];

for (var i = 0; i < balls[0].numSegment; i ++) {
    balls[0].boundOffset.push(balls[0].radius);
    balls[0].boundOffsetBuff.push(balls[0].radius);
    balls[0].path.add(new Point());
    balls[0].sidePoints.push(new Point({
        angle: 360 / balls[0].numSegment * i,
        length: 1
    }));
}


这是js小提琴-http://jsfiddle.net/wMQth/147/

最佳答案

在添加新点之前,您需要删除路径中的现有点。
这是修改后的fiddle

balls[0].radius = Math.sqrt((balls[0].path.area + balls[0].score)/ Math.PI);

balls[0].maxVec = 15;
balls[0].numSegment = Math.floor(balls[0].radius / 3 + 2);
balls[0].boundOffset = [];
balls[0].boundOffsetBuff = [];
balls[0].sidePoints = [];

// reset path before adding new points
balls[0].path.removeSegments();

for (var i = 0; i < balls[0].numSegment; i ++) {
    balls[0].boundOffset.push(balls[0].radius);
    balls[0].boundOffsetBuff.push(balls[0].radius);
    balls[0].path.add(new Point());
    balls[0].sidePoints.push(new Point({
        angle: 360 / balls[0].numSegment * i,
        length: 1
    }));
}

09-25 21:52