我的代码很慢,我不知道如何修复它?

问题描述

我正在制作一个可以绘制的程序,当超过 38000 _points 时它开始滞后。

代码如下:

public class _point {
  float x = 0;
  float y = 0;

  boolean active = true;

  color c = color(255,255,255);

  public void _point() {
  }
  public void change_pos(float x1,float y1,color c1)
  {
    x = x1;
    y = y1;
    c = c1;
  }
  public void u_line(float px,float py)
  {
    if (dist(x,y,px,py) < 15)
    {
      stroke(c);
      strokeWeight(5);
      line(x,py);
    }
  }
  public void remove_beans()
  {
    if (eraser) {
      if (dist(x,mouseX,mouseY)<main_tool.radius/2) {
        active = false;
      }
    }
  }
  public void a_line()
  {
    for (int i = 0; i < _points.size(); ++i) {
      _point part = _points.get(i);

      if (dist(x,part.x,part.y) < 15)
      {
        line(x,part.y);
      }
    }
  }
}

以及它的绘制位置:

ArrayList<_point> _points = new ArrayList<_point>();
void draw_beans() {
  for (int i = 0; i < _points.size(); ++i) {
    _point part = _points.get(i);

    if (part.active == false) {
      _points.remove(i);
    }

    if (i != 0 && i != _points.size()-1 && i != _points.size()) {
      OPTIMIZE(_points.get(i+1),part,_points.get(i-1));
    }

    if (i != 0) {
      _point past = _points.get(i-1);

      part.u_line(past.x,past.y);//past.x,past.y
    }
  }
}

这是将点添加到数组中:

void add_beans() {
  if (!eraser && !IIIINNZ()) {
    _points.add(new _point());
    _point part = _points.get(_points.size()-1);
    part.change_pos(mouseX-transX,mouseY-transY,color(int(color_text0.texts),int(color_text1.texts),int(color_text2.texts)));
  }
  for (int i = 0; i < _points.size(); ++i) {
    if (eraser && !IIIINNZ()) {
      _point part = _points.get(i);
      part.remove_beans();
    }
  }
}

和优化:

void OPTIMIZE(_point next,_point thiss,_point prev) {
  if (dist(thiss.x,thiss.y,next.x,next.y)+dist(thiss.x,prev.x,prev.y)<14) {
    thiss.active = false;
  }
}

设置:

void setup() {
  size(512,512);
  noCursor();
}

画:

void draw() {
  background(#222833);//27,27,33
  textFont(font);

  pushMatrix();
  translate(transX,transY);
  draw_beans();
  popMatrix();

  show_options();

  main_tool.update();

  println(_points.size());
}

我尝试多线程处理,但线程与动画线程不对齐,因此缺少点。

我正在使用 Processing 3 java 库和 vscode。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)