Я вижу, что вы оживляете текст. Есть много способов сделать это, но в этом случае я думаю, что использование миллисекунд для измерения времени вашей анимации будет справедливым. Это могло бы быть наоборот, но с простым текстом я думаю, что чем проще для вас, тем лучше.
Для более сложной цели я бы предложил вам узнать о шаблоне проектирования с именем"государство" . Тем не менее, для этой анимации мы проходим через нее ниндзя способом, который будет близок к тому, что вы уже сделали, но лучше для ваших целей.
Мы будем использовать простой switch
, слогика, подобная состоянию.
Переключатель - это простое утверждение, которое сравнивает переменную с последовательностью возможных значений. Как только он достигает значения, которое он распознает, он «входит» в этот случай и делает все, что там написано.
Вы можете представить его как более элементарное утверждение If ... Else If ... Else
. Это не совсем то же самое, что можно прочитать только один case
внутри коммутатора, так как вам нужно «разбить» случай, чтобы избежать запуска других, но в конце концов он довольно похож, но часто проще для чтения.
Мы будем использовать switch
, потому что он прост в использовании и потому что вам будет легко читать и понимать.
«Состояние» - это способ определения того, чтов настоящее время происходит с определенным объектом (который является целой анимацией в данном случае).
Нам понадобится новая переменная для хранения текущего состояния. Мы назовем это «состояние», я думаю. Это будет строка. Думаю, это может быть что угодно, но вам будет легко читать строку, и как однажды сказал мудрый человек: код для людей и как побочный эффект компьютеры смогут его читать.
Переключатель проверит текущее состояние и будет действовать соответственно. Таким образом, вы сможете сбросить таймер каждый раз, когда вы переходите в новое состояние. Я изменю ваш текущий код, чтобы отразить это, и позволю вам выполнять большую часть работы.
Кроме того, еще одна вещь: чтобы упростить задачу, я даю вам этот класс: задержка. Это то, что я закодировал как студент, и я все еще время от времени использую это. Он действует как таймер. Этот класс позволит вам установить количество времени и проверить, истек ли он.
class Delay {
protected int limit;
public Delay() {limit = millis();}
public Delay (int l) {
limit = millis() + l;
}
public boolean expired () {
if (millis() > limit) { return true; }
return false;
}
}
А вот модифицированный код (включая класс Delay
):
int per = 0;
String state = "beginning";
String currentText = "";
Delay delay;
String headband = "Clip band around your head to begin";
String access = "Welcome to Brain Frame -- an intersection between the mind and the virtual. Please press the blue button to proceed a neural link. Press the red button to exit.";
String Y ="Establishing pre-cursory neural link. Do not remove headband.";
String N ="Shutting Down. Do not remove headband until prompted - may result in memory distortion otherwise.";
boolean yes = false;
boolean no = false;
boolean head = false;
class Delay {
protected int limit;
public Delay() {limit = millis();}
public Delay (int l) {
limit = millis() + l;
}
public boolean expired () {
if (millis() > limit) { return true; }
return false;
}
}
void setup() {
size(1080, 720);
delay = new Delay();
}
void draw () {
SetText();
background(0);
fill(0,255,255);
text (currentText, 540, 360);
textSize(30);
textAlign(CENTER);
}
void SetText() {
// This method will check what text you should display and set it. The draw() method will... well, just "draw" everything.
// The switch "choose" what to do by checking what you set the "state" variable to.
switch(state) {
case "beginning":
currentText = headband;
if (head) {
state = "head";
}
break;
case "head":
currentText = access;
if (yes) {
state = "yes";
} else if (no) {
state = "no";
}
break;
case "yes":
currentText = Y + "\n" + per + "%";
if (per < 100) {
if (delay.expired()) {
// the delay timer will expire every 100 milliseconds until the 'per' variable is 100, kinda like you did but with a timer
per += 1;
delay = new Delay(100);
}
} else {
state = "childhood";
delay = new Delay(3000);
}
break;
case "no":
currentText = N;
break;
case "childhood":
currentText = "Think about your childhood";
if (delay.expired()) {
state = "link";
delay = new Delay(3000);
}
break;
case "link":
currentText = "Link created";
break;
}
}
void keyPressed(){
if (key == 'j' || key == 'J'){
head = true;
}
if (key == 'y' || key == 'Y'){
yes = true;
}
if (key == 'n' || key == 'N'){
no = true;
}
}
Пожалуйста,Заметьте, что, не имея представления о том, какие сроки вы хотите (или как их заказать), я сделал что-то вроде. Вы должны выяснить, как сделать так, как вы хотите. Я думаю, что теперь у вас будет все необходимое для этого. Кроме того, я здесь, если вам нужна дополнительная информация.
Веселитесь!