Javascript P5.js绘制新形状会导致旧形状消失
我在做一个复杂的可视化项目,使用p5.js我想创建多个形状簇来可视化各种数据,所以我在数据中循环,检查用户指定的对象并将它们绘制到画布上,这发生在嵌套for循环中…我面临的问题是,当一个内循环完成绘制一组形状时,整个循环继续并再次进入内循环以绘制下一组,绘制的形状的旧组消失…我不明白为什么,我认为这与形状与内部循环上下文/范围有关,并试图基于此重新创建问题,但情况似乎并非如此 例如,这段代码工作得很好,它在20行上画了5个圆,由嵌套循环运行Javascript P5.js绘制新形状会导致旧形状消失,javascript,data-visualization,p5.js,Javascript,Data Visualization,P5.js,我在做一个复杂的可视化项目,使用p5.js我想创建多个形状簇来可视化各种数据,所以我在数据中循环,检查用户指定的对象并将它们绘制到画布上,这发生在嵌套for循环中…我面临的问题是,当一个内循环完成绘制一组形状时,整个循环继续并再次进入内循环以绘制下一组,绘制的形状的旧组消失…我不明白为什么,我认为这与形状与内部循环上下文/范围有关,并试图基于此重新创建问题,但情况似乎并非如此 例如,这段代码工作得很好,它在20行上画了5个圆,由嵌套循环运行 function setup() { creat
function setup() {
createCanvas(window.innerWidth, window.innerHeight).parent('myContainer');
}
function draw() {
background(220);
x = 100;
y = 100;
for (let i = 1; i <= 20; i++) {
for(let j=1;j<=5;j++){
fill(color(0, 255, 0));
stroke(0);
ellipse(x, y, 80);
x += 90;
}
x = 100;
y += 90;
}
}
这是我的项目代码,它显示了错误发生的位置
function setup() {
createCanvas(viewWidth, viewHeight).parent('myContainer');
}
function draw() {
//code...
var objects_len = objects.length;
for (var cluster_index = 1; cluster_index < cluster_len; cluster_index++) {
array_center = partition(cluster_index - 1, cluster_len - 1);
for (var object_index = 0; object_index < objects_len; object_index++) {
if (!objects[object_index].deleted) {
draw_simple_object(objects[object_index], data, cluster_index, array_center, cluster_len);
}
}
addClusterName(cluster_index, data, array_center);
}
function draw_simple_object(object, data, cluster_index, array_center, cluster_len) {
.
.
.
//this is where the drawing happens
var center_shape = [array_center[0] + object.centerOffsetX * array_center[2], array_center[1] + object.centerOffsetY * array_center[3]];
if (object.shape === 'ellipse' && enable) {
var size_min = Math.min(array_center[2], array_center[3]) * 2;
fill(colorFill);
stroke(object.colorBorder);
ellipse(center_shape[0], center_shape[1], size_min * width * proportion, size_min * length * proportion);
}
.
.
.
}
}
函数设置(){
createCanvas(viewWidth,viewHeight).parent('myContainer');
}
函数绘图(){
//代码。。。
var objects_len=objects.length;
对于(var cluster_index=1;cluster_index
请帮助我这可能是因为您正在循环中调用background()函数吗?(该部分实际上没有显示在代码片段中)已解决
我在draw()中的一个函数中使用了resizeCanvas(),该函数在调整大小之前清除了画布上的所有内容。移除resizeCanvas解决了问题。不,我没有这么做
function setup() {
createCanvas(viewWidth, viewHeight).parent('myContainer');
}
function draw() {
//code...
var objects_len = objects.length;
for (var cluster_index = 1; cluster_index < cluster_len; cluster_index++) {
array_center = partition(cluster_index - 1, cluster_len - 1);
for (var object_index = 0; object_index < objects_len; object_index++) {
if (!objects[object_index].deleted) {
draw_simple_object(objects[object_index], data, cluster_index, array_center, cluster_len);
}
}
addClusterName(cluster_index, data, array_center);
}
function draw_simple_object(object, data, cluster_index, array_center, cluster_len) {
.
.
.
//this is where the drawing happens
var center_shape = [array_center[0] + object.centerOffsetX * array_center[2], array_center[1] + object.centerOffsetY * array_center[3]];
if (object.shape === 'ellipse' && enable) {
var size_min = Math.min(array_center[2], array_center[3]) * 2;
fill(colorFill);
stroke(object.colorBorder);
ellipse(center_shape[0], center_shape[1], size_min * width * proportion, size_min * length * proportion);
}
.
.
.
}
}