Duración de un elemento y secuencia

Estoy intentando que aparezca un texto en la pantalla durante 3 segundos y luego aparezca otro texto diferente. He conseguido programar el primer texto correctamente, pero no sé que función tengo que usar para desaparezca a los 3 segundos y se vea el segundo texto.

1 Like

use timer
https://processing.org/reference/millis_.html


a deluxe edition:

int step = 0;
long ts, tr;
long[] animator={12000, 7000, 20000}; //________ time schedule in msec

void timer() {
  tr  = animator[step] - ( millis() - ts ) ; //_ for show remaining time only
  if ( millis() - ts > animator[step] ) {
    // do whatever you have to do
    println(timeString() + " end step "+step);
    step++;
    ts = millis();
    if ( step >= animator.length ) step = 0; //- auto repeat
  }
}

void setup() {
  println( timeString() );
}

void draw() {
  background(200, 200, 0);
  fill(0);
  text( "step "+step+" tr "+(tr/1000), 10, height/2); //_ show remaining time
  timer();
}

String timeString() {
  return ""+year() + "-" + nf(month(), 2) + "-" + nf(day(), 2) + "_" +
    nf(hour(), 2) + "_" + nf(minute(), 2) + "_" + nf(second(), 2);
}

1 Like

No hay un modo más sencillo? ':slight_smile:

String myText = "TEXT A";
boolean init = true;

void timer() {
  if ( init ) {
    if ( millis() > 3000 ) { 
      myText = "TEXT B";
      init = false;
      println("timeout");
    }
  }
}

void setup() {
}
void draw() {
  background(200,200,0);
  timer();
  text(myText, 10, 10);
}

1 Like

En este video lo explico en inglés, pero igual se entiende el programa sin ver el vídeo?

https://funprogramming.org/91-Timelines-tell-a-story.html

1 Like

El código es fácil de entender y funciona en mi programa, pero cuando aparece scene2(), scene1() no se borra y queda debajo, ambas son escenas estáticas. ¿Cómo puedo conseguir que scene1() dure 3 segundos, se borre y empiece scene2()? Mi código es

void draw (){
  int m = millis();
  if(m < 3000) {
    scene1();
  } else if(m > 3000) {
    scene2();
  }

Gracias

Hello,

:slight_smile:

Mi código es

void draw (){
  int m = millis();
  if(m < 3000) {
    scene1();
  } else if(m > 3000) {
    scene2();
  } 

¿Sugieres con ese ejemplo que en vez de usar if y else if use switch? ¿Se usa de la misma forma?

-1- please format your code </> code button
and post running code we can test.

-2- your question why drawing scene1 is not erased after 3 sec?
you need the background(); at the beginning of draw ( or in all sceneX(){}; )

-3- what you want your program to do if millis() == 3000
sorry, bad trick question, your if logic should be revised

void setup() {}

void draw () {
  background(200, 200, 0);
  if (millis() < 3000)  scene1();
  else                  scene2();
}

void scene1() { 
  text("scene 1", 10, 10);
}
void scene2() {
  text("scene 2", 10, 10);
}

-4-
using if
https://processing.org/reference/if.html

or switch
https://processing.org/reference/switch.html
is up to you.

1 Like

Gracias, usando background() al principio de draw() lo consigo.

1 Like