即时通讯使用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
}));
}