0

我正在尝试使文本逐渐改变颜色。

我现在所做的是这样的:

void printDaString(){
  for(int i = 128; i < 255; i ++){
    fontFill(color(i));
    print("This is da string!", x, y);
    delay(10);
  }
}
  • void fontFill(color toSet)更改图像颜色toSet并执行color fontColFill = toSet
  • void print(String toPrint, float x, float y)执行一个循环,其中字符串的每个字母都打印有一张图像[换句话说,我的字体是 MsPaint 绘制的字体 =P 并print替换text]。
  • 如您所知,如果介于和之间,color color(int value)则返回灰度颜色。value0255

我试图delay(10)希望它足以刷新[缓冲区或类似的东西],但没有!

程序现在所做的只是渲染最后一个屏幕,所以我看到的只是一个打印的白色字符串 D=

任何提示?

PS 由于平滑问题,我选择使用图像作为字体。PPS 解析int i作为参数将是一个解决方案,但将是一个巨大的成本!

4

1 回答 1

1

我认为这是因为 draw() 仅在每个循环结束时渲染图像。因此,您的 for 循环完全执行,将颜色设置为 255,然后执行返回到绘制继续并渲染图像,已经是白色。你需要用 if 来做,它会起作用。我使用全局变量设置了一个示例,但您可以根据需要对其进行调整。还要避免延迟,出于同样的原因,它只会挂起程序。你可能想看看这篇文章形式的 wiki

int i = 128;

void draw() {
  printDaString();
}

void printDaString() {      
  if (i < 255) {
    fontFill(color(i));
    print(i);
    i++;
  }
}

void fontFill(color c) {
  fill(c);
  ellipse(width/2, height/2, 30, 30);
}

甚至更简单:

int i = 128;

void draw() {
  i = i<255? i+=1:128;
  fontFill(i);
}

void fontFill(int c) {
  fill(c);
  noStroke();
  ellipse(width/2, height/2, 30, 30);
}
于 2013-05-23T23:44:36.743 回答