Processing 如何只更新一次像素

Processing 如何只更新一次像素,processing,pixels,Processing,Pixels,我的像素正在更新每一帧,使效果重新应用于前一帧。如何使此效果只发生一次而不使用noLoop()。我只想在三角形周围有一个大圆圈。请帮忙。谢谢 这是整个节目。我将帧速率设置为1,这样您可以更容易地看到问题: boolean up; int x =-300; int y =-300; void setup() { size(600, 600); frameRate(1); } void draw() { pushMatrix(); translate(300, 300); f

我的像素正在更新每一帧,使效果重新应用于前一帧。如何使此效果只发生一次而不使用noLoop()。我只想在三角形周围有一个大圆圈。请帮忙。谢谢

这是整个节目。我将帧速率设置为1,这样您可以更容易地看到问题:

boolean up;
int x =-300;
int y =-300;

void setup()
{
  size(600, 600);
  frameRate(1);
}

void draw()
{
  pushMatrix();
  translate(300, 300);
  float a = atan2(mouseY-300, mouseX-300);
  rotate(a);

  for (int i = x; i < x+width; i+=40)
    for (int j = y; j < y+height; j+=40)
      rect(i, j, 40, 40);

  loadPixels();
  for (int i = 0; i < pixels.length; i++)
  {
    x = i%width;
    y = i/width;
    color c = pixels[x+y*width];
    float d = dist(x, y, width/2, height/2);
    pixels[x+y*width] = color(brightness(c) - d);
  }
  updatePixels();

  popMatrix();

  fill(255, 0, 0);
  triangle(280, 300, 300, 200, 320, 300);

  if (up) 
  {
    x += sin(a)*5; 
    y += cos(a)*5;
  }
}

void keyPressed()
{
  if (key=='w')up=true;
}

void keyReleased()
{
  if (key=='w')up=false;
}
boolean-up;
int x=-300;
int y=-300;
无效设置()
{
大小(600600);
帧率(1);
}
作废提款()
{
pushMatrix();
翻译(300300);
浮子a=atan2(mouseY-300,mouseX-300);
轮换(a);
对于(int i=x;i
在一个帧中重新绘制所有内容。

请记住,在使用过滤器之前,必须撤消上次的过滤器效果。 draw()函数中的常规顺序如下所示:

  • 添加背景/清除上一帧中添加的所有对象&清除上一帧的过滤器
  • 添加对象
  • 把过滤器放在上面
  • 尽量避免在设置中做任何与图形相关的事情,因此它将被这个draw()函数-paradigma破坏

    这应该已经足够作为你的答案了。简要说明:
    当您使用例如3D阴影过滤器时,应用过滤器可能需要很长时间。相反,我们尝试存储在前一帧上进行的计算,因此不需要重新计算所有内容。对象层也是如此。你不想在每一帧计算一个仆从的最短路径,相反,你只需计算一次最短路径,并且只在发生变化时重新计算它:一个盒子的位置、玩家的位置等等。

    在一帧中重新绘制所有内容。

    请记住,在使用过滤器之前,必须撤消上次的过滤器效果。 draw()函数中的常规顺序如下所示:

  • 添加背景/清除上一帧中添加的所有对象&清除上一帧的过滤器
  • 添加对象
  • 把过滤器放在上面
  • 尽量避免在设置中做任何与图形相关的事情,因此它将被这个draw()函数-paradigma破坏

    这应该已经足够作为你的答案了。简要说明:
    当您使用例如3D阴影过滤器时,应用过滤器可能需要很长时间。相反,我们尝试存储在前一帧上进行的计算,因此不需要重新计算所有内容。对象层也是如此。你不想在每一帧计算一个仆从的最短路径,相反,你只需计算一次最短路径,并且只在发生变化时重新计算它:一个盒子的位置、玩家的位置等等。

    在一帧中重新绘制所有内容。

    请记住,在使用过滤器之前,必须撤消上次的过滤器效果。 draw()函数中的常规顺序如下所示:

  • 添加背景/清除上一帧中添加的所有对象&清除上一帧的过滤器
  • 添加对象
  • 把过滤器放在上面
  • 尽量避免在设置中做任何与图形相关的事情,因此它将被这个draw()函数-paradigma破坏

    这应该已经足够作为你的答案了。简要说明:
    当您使用例如3D阴影过滤器时,应用过滤器可能需要很长时间。相反,我们尝试存储在前一帧上进行的计算,因此不需要重新计算所有内容。对象层也是如此。你不想在每一帧计算一个仆从的最短路径,相反,你只需计算一次最短路径,并且只在发生变化时重新计算它:一个盒子的位置、玩家的位置等等。

    在一帧中重新绘制所有内容。

    请记住,在使用过滤器之前,必须撤消上次的过滤器效果。 draw()函数中的常规顺序如下所示:

  • 添加背景/清除上一帧中添加的所有对象&清除上一帧的过滤器
  • 添加对象
  • 把过滤器放在上面
  • 尽量避免在设置中做任何与图形相关的事情,因此它将被这个draw()函数-paradigma破坏

    这应该已经足够作为你的答案了。简要说明:
    当您使用例如3D阴影过滤器时,应用过滤器可能需要很长时间。相反,我们尝试存储在前一帧上进行的计算,因此不需要重新计算所有内容。对象层也是如此。你不想在每一帧计算一个仆从的最短路径,相反,你只需计算一次最短路径,并在某些情况发生变化时重新计算它:一个盒子的位置、玩家的位置等等。

    如果你想使用你的过滤器并流畅地四处移动,请像这样更新你的效果:

    for(int y=0;y
    您进行了不必要的计算,这会消耗大量CPU资源。重新绘制背景也有助于制作更清晰的动画


    如果您只想生成此效果一次,然后应用它。可以达到类似的效果。

    如果你想,就用你的文件吧