如何在屏幕上逐个字符地绘制字符串

时间:2019-03-21 11:37:07

标签: string loops animation text processing

我有下面的代码,在从字符串绘制字符之间创建延迟,这在使用println()时有效,但是在使用text()函数时不起作用。该代码应该等待指定的时间,然后打印下一个字符,我真的不确定自己在做什么错。

int startTimer;
int waitTime = 500;
boolean funcRun = true;

void setup(){
 size(500, 500);
 startTimer = millis();
}

void draw(){
  while(funcRun){
    textAnim("hello");
  }
}

void textAnim(String textInput){
int counter = 0;
int x = 10;

while(counter < textInput.length()){
    if(millis() - startTimer>waitTime){
      text(textInput.charAt(counter), x , 100);
       startTimer = millis();
       ++counter;
       x = x + 10;
    }
    funcRun = false;
  }
}

1 个答案:

答案 0 :(得分:1)

显示的屏幕在draw()功能的末尾更新。因此,您的while循环已完全执行,并显示了完整的文本。您必须修改代码,以便它可以不断刷新/重画屏幕,并根据时间循环更新显示的文本。

例如这样的

int currentTime;
int waitTime = 500;
int characters_to_display = 0;
boolean stringComplete = false;

String textInput = "Hello"; 

void setup() {
  size(500, 500);
  currentTime = millis();
}

void draw() {
  // Update text to be shown. increaseCharIndex() is called while the text is not yet fully displayed
  if (stringComplete == false) {
    increaseCharIndex();
  }

  //Draw screen:

  // draw background to clear screen
  background(0);
  // display (a substring of) the text
  text(textInput.substring(0, characters_to_display), 10, 100);
}

void increaseCharIndex() {
  // if the waitperiod has passed, increase the number of characters to be displayed
  if (millis() - currentTime>waitTime) {
    currentTime = millis();
    characters_to_display++;
  }    
  // if the full text will be shown, end the call to increaseCharIndex()
  if (characters_to_display >= textInput.length())
  {
    stringComplete = true;
  }
}

enter image description here