Похоже, вам нужно обновить значения в зависимости от времени.
Если вы сохраняете время запуска, вы всегда можете проверить, сколько времени прошло, используя функцию millis () .
Как только вы знаете, сколько прошло времени, вы можете разделить эту разницу на продолжительность, которую вы хотите обновить свою переменную (в вашем случае - упитанность).
Это даст вам значение от 0,0 до 1,0, которое вы можете использовать для масштабирования / умножения до конечного желаемого значения для вашей переменной (например, упитанность увеличивается от 20 до 200).
Вот что я имею в виду:
int startTime;
int duration = 1000;
float startValue = 20;
float endValue = 200;
float currentValue = startValue;
void setup(){
size(400,400,P2D);
ellipseMode(CENTER);
startTime = millis();
}
void draw(){
background(255);
increaseCircle();
drawCircle();
}
void drawCircle() {
fill(48, 139, 206);
ellipse(width - currentValue, height - currentValue, currentValue, currentValue);
}
void increaseCircle(){
float progress = (float)(millis()-startTime)/duration;//millis()-startTime = difference in time from start until now
if(progress <= 1.0) currentValue = startValue + (endValue * progress);//the current value is the final value scaled/multiplied by the ratio between the current duration of the update and the total duration
}
void mousePressed(){//reset value and time
currentValue = startValue;
startTime = millis();
}
void keyPressed(){//update duration
if(key == '-') if(duration > 0) duration -= 100;
if(key == '=' || key == '+') duration += 100;
println("duration: " + duration);
}
В этой простой демонстрации вы можете нажать, чтобы сбросить анимацию и использовать клавиши -
и =
, чтобы увеличить или уменьшить продолжительность анимации.
Если вам удобно использовать внешние библиотеки в Processing, вам следует взглянуть на эту библиотеку .
Вы можете запустить демонстрацию ниже:
var startTime;
var duration = 1000;
var startValue = 20;
var endValue = 200;
var currentValue = startValue;
function setup(){
createCanvas(400,400);
ellipseMode(CENTER);
startTime = millis();
}
function draw(){
background(255);
increaseCircle();
drawCircle();
}
function drawCircle() {
fill(48, 139, 206);
ellipse(width - currentValue, height - currentValue, currentValue, currentValue);
}
function increaseCircle(){
var progress = (float)(millis()-startTime)/duration;//millis()-startTime = difference in time from start until now
if(progress <= 1.0) currentValue = startValue + (endValue * progress);//the current value is the final value scaled/multiplied by the ratio between the current duration of the update and the total duration
}
function mousePressed(){//reset value and time
currentValue = startValue;
startTime = millis();
}
function keyPressed(){//update duration
if(key == '-') if(duration > 0) duration -= 100;
if(key == '=' || key == '+') duration += 100;
println("duration: " + duration);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.4.4/p5.min.js"></script>