Hi. I know there’s something blindingly obvious wrong with this - but I’m too blind to know what it is. Would love some help if you can spare the time. The objective is for a button to have text that fades in and out in different languages. I have tried so many interations that almost work but not quite. I think the problem is that the fade loop is the same for fade in and fade out and I only want the text to change at the end of the fadeout cycle - but I thought this solution would fix it. Could anyone explain to me why it doesn’t? Thanks in advance. Jen
PImage button;
int timeDelay = 4000;
int time = 0;
int lastTime = 0;
int fadeout = 255;
int fadein = -100;
int index = 0;
//Draws the button
//imageMode (CENTER);
//image (button, width/2, height/2);
// Fades the word up AND down. tfin = true fades up tfin false = fade down
if (textfadesin) {
fill(255, fadein);
fadein++;
} else {
fill(255, fadeout);
fadeout–;
}
//Loads the word
text (wordsList[index], width/2, 340);
// Swaps value of tfin from true to false or vice versa
if (millis() - time >= timeDelay) {
time = millis();
textfadesin = !textfadesin;
//Changes the word
if ((fadeout == 0) && (index < 4)) {
index += 1;
} else {
index = 0;
}
//Resets fadein and fadeout
fadein = 0;
fadeout = 255;
Hi @jenk
The code looks good.
Just some small modification though maybe not maybe exactly right because I don’t know how it’s supposed to work.
But I guess now you will figure it out.
PImage button;
int timeDelay = 4000;
int time = 0;
int lastTime = 0;
int fadeout = 255;
int fadein = -100;
int index = 0;
String[] wordsList ={
"language1",
"language2",
"language3",
"language4",
"language5",
};
void setup() {
size(800, 680);
background(152, 152, 152);
//rectMode(CORNER);
rectMode(CENTER);
textSize(40);
smooth();
textAlign(CENTER, CENTER);
//button = loadImage("small button.png");
}
boolean textfadesin = true;
void draw() {
background(0);
//Draws the button
//imageMode (CENTER);
//image (button, width/2, height/2);
rect(width/2, height/2, 250, 60);
// Fades the word up AND down. tfin = true fades up tfin false = fade down
if (textfadesin) {
fill(255, fadein);
fadein++;
} else {
fill(255, fadeout);
fadeout--;
}
//Loads the word
text (wordsList[index], width/2, 340);
// Swaps value of tfin from true to false or vice versa
if (millis() - time >= timeDelay) {
time = millis();
textfadesin = !textfadesin;
//Changes the word
if ((fadeout == 255) && (index < 4)) {
index++;
}
if (index > 5) index = 0;
//Resets fadein and fadeout
fadein = 0;
fadeout = 255;
}
}
Hi Noel. Thanks for your input. It’s hugely appreciated. I’ve tidied up what you sent me a bit further and taken out all the extraneous bits. It’s now doing almost exactly what I wanted it to do except for one thing. The word is changing when the text is ‘on’ and I want it to change when the text is ‘off’. IE The text string is advancing when the opacity is at 255 and I want it to change when the opacity is at zero. So surely changing the value of opacity from 255 to 0 should work? But it doesn’t and I really can’t understand why. Would really appreciate any advice.
int timeDelay = 4000;
int time = 0;
int fadeout = 255;
int fadein = -100;
int index = 0;
int opacity = 255;
// Fades the word up AND down. tfin = true fades up tfin false = fade down
if (textfadesin) {
fill(255, fadein);
fadein++;
} else {
fill(255, fadeout);
fadeout–;
}
//Loads the word
text (wordsList[index], width/2, 340);
// Swaps value of tfin from true to false or vice versa
if (millis() - time >= timeDelay) {
time = millis();
textfadesin = !textfadesin;
//Changes the word
if ((fadeout == opacity) && (index < 5)) {
index++;
}
if (index == 5) index = 0;
//Resets fadein and fadeout
fadein = 0;
fadeout = 255;
}
}
(Apologies for the delayed response but I managed to completely break my Mac yesterday and I only just got it back up and running)