问题描述
我正在制作一个可以绘制的程序,当超过 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 (将#修改为@)