java - 代码颤动(线条有点跳跃,看起来很糟糕)

标签 java animation processing draw

所以我有这个小程序(或者草图,如果你喜欢的话)。我的问题是,我该如何表达,当线条移动时,会有点抖动和颤动。这与我的计算机的处理能力有关,还是我应该以不同的方式编码?

这是代码:

int i, j;

void setup() {
  size(1440, 900);
  background(0);
  smooth();
  strokeWeight(10);
  i = width/2 - (width/2);
  j = width;
}

void draw() {
  fill(0, 10); // semi-transparent black
  stroke(0);
  rect(0, 0, width, height); //legger seg lag på lag

  if (i < width-200) {
    i+=4;
    j-=4;
  }
  else {
    i = width/2 - (width/2);
    j = width;
  }

  stroke(255);
  line(width/2, height, i, 30);
  line(width/2, height, i+40, 30);
  line(width/2, height, i+80, 30);
  line(width/2, height, i+120, 30);
  line(width/2, height, i+160, 30);
  line(width/2, height, i+200, 30);
  line(width/2, height, j, 30);
  line(width/2, height, j-40, 30);
  line(width/2, height, j-80, 30);
  line(width/2, height, j-120, 30);
  line(width/2, height, j-160, 30);
  line(width/2, height, j-200, 30);
}

最佳答案

使用 JVisualVM 进行快速配置后事实证明有两个罪魁祸首:

  1. 渲染线
  2. 处理抗锯齿透明度

渲染线: 在幕后处理将每条线渲染为形状(beginShape()/endShape()),在本例中使用 LINES。您可以为处理提供帮助,而不是使用多个 beginShape/endShape 调用(每行 1 个),只需对所有行使用一个即可:

beginShape(LINES);
  for(int k = 0; k < 200; k+= 40){
    vertex(hw, height);vertex(i+k, 30);
    vertex(hw, height);vertex(j-k, 30);
  }
  endShape();

抗锯齿和透明度 使用透明度通常计算量很大,尤其是对于大图像。 运行下面的代码片段,按下鼠标按钮,看看在不使用透明度时,frameRate 如何变化。

抗锯齿的计算成本也很高。不像透明度那么重要,但除此之外,它也有影响。按任意键可在锯齿图形和抗锯齿图形之间切换

Here are a few tweaks to your code:
int i, j;
int hw;
boolean smooth;
void setup() {
  size(1440, 900);
  background(0);

  strokeWeight(10);

  hw = width/2;
  i = width/2 - (width/2);//isn't this 0 ?
  j = width;
}

void draw() {
  fill(0,mousePressed ? 255 : 10); // semi-transparent black
  noStroke();
  rect(0, 0, width, height); //legger seg lag på lag
  if (i < width-200) {
    i+=4;
    j-=4;
  }
  else {
    i = 0;
    j = width;
  }

  stroke(255);
  beginShape(LINES);
  for(int k = 0; k < 200; k+= 40){
    vertex(hw, height);vertex(i+k, 30);
    vertex(hw, height);vertex(j-k, 30);
  }
  endShape();
  frame.setTitle((int)frameRate+" fps, smooth: " + smooth); 
}

void keyReleased(){
  smooth = !smooth;
  if(smooth) smooth();
  else       noSmooth();
}

关于java - 代码颤动(线条有点跳跃,看起来很糟糕),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459904/

相关文章:

java - 在java类的ArrayList中更新类的单个变量

java - 有没有办法利用表(azure-storage)客户端 API 通过 CosmosDb 设置项目级别 TTL(生存时间)?

c# - 如何在启动画面中应用 Lottie 动画?

java - 对象共享另一个对象(处理 3.3.7)

java - 处理应用程序中两点之间的距离?

java - 使用引用库 Eclipse 进行调试/编译

java - Mac 版 Java 中的文件输入

html - 为什么我的 css slider 不能在 chrome 中工作,但在 IE 和 Fifox 中工作

android - Flutter 动画不褪色(它在闪烁)

audio - 处理:如何使触发的声音停止?