所以我试图根据从数据库中提取的数字动态创建形状。我尝试了最合乎逻辑的方法,将 for 循环包裹在创建形状并随后将形状添加到图层中。但是由于某种我不知道的原因,即使存储在图层中的形状应该位于不同的位置(和不同的属性),它也会不断地重新修改相同的形状。
我的代码如下:
function graph(w) {
barLayer.removeChildren();
var bar = new Array();
for (var i = 1; i <= array.length; i++) {
var pos = i * Math.PI / 30;
var scaleUp = (i / array.length) * 2.5;
bar[i-1] = new Kinetic.Shape({
drawFunc: function(context) {
context.beginPath();
context.moveTo(radius2, radius2);
context.arc(radius2, radius2, scaleUp * radius2, (- Math.PI / 2) - w + pos, (- Math.PI / 2) - w + (Math.PI / 30) + pos, false);
context.closePath();
this.stroke(context);
this.fill(context);
},
fill: "#333",
stroke: "#000",
strokeWidth: 4,
x: centerX,
y: centerY,
offset: [200,200],
});
console.log("Starting: ", (- Math.PI / 2) - w + pos, "/ Ending: ", (- Math.PI / 2) - w + (Math.PI / 30) + pos);
}
for (var n = 0; n < bar.length; n++) {
barLayer.add(bar[n]);
}
barLayer.draw();
}
从将形状放入数组到创建新形状并将其添加到 for 循环中,我已经尝试了所有方法。我肯定错过了一些东西。
我对该主题进行了一些搜索,发现一条与我正在尝试做的事情相关的评论:
基本上,您需要保留一个形状对象数组,并在添加新形状时将新对象推送到数组上。在 kin 对象的 setDrawStage() 方法中,只需循环遍历数组并绘制每个对象。我会在实验室发布后通知您。
我已经到处寻找 setDrawStage() 方法,但找不到太多与之相关的数据。他还表示将 for 循环放在方法中,这有点令人困惑,因为我不仅想绘制形状,而且还想将它存储在一个图层中(就像我对其他所有形状所做的那样)。
有人可能有解决方案吗?非常感谢先进。