Чтобы приостановить и возобновить обновление позиции, вам нужно создать отдельную переменную для отслеживания этого изменения состояния: в этом случае идеально подходит логическое значение.
например,
boolean shouldSquareUpdate = true;
Вы можете использовать keyPressed()
для прослушивания изменений ключа в обработке:
void draw(){
}
void keyPressed(){
println("key: " + key + " keyCode: " + keyCode);
}
Следующая часть переключает логическое значение:
- , если значение было
true
, установите его на false
- , если оно было
false
, установите на true
например
void keyPressed(){
// toggle boolean (if true, set it to false, if false, set it to true)
if(shouldSquareUpdate == true){
shouldSquareUpdate = false;
}else{
shouldSquareUpdate = true;
}
}
Эту проблему можно решить более элегантно с помощью логического оператора NOT , который по существу переворачивает логическое состояние:
void keyPressed(){
// toggle boolean (if true, set it to false, if false, set it to true)
shouldSquareUpdate = !shouldSquareUpdate;
}
Наконец, вы должны использовать это условие, чтобы определить, является ли y
значение должно быть обновлено (или нет):
// update only if value is true
if(shouldSquareUpdate){
y += dy;
}
Полный эскиз будет выглядеть так:
int x = 0;
int y = 0;
int dy = 1;
boolean shouldSquareUpdate = true;
void setup() {
size(1280, 720);
surface.setResizable(true);
}
void draw() {
background(240, 240, 240);
fill(255, 147, 79);
rect(x, y, 90, 90);
// update only if value is true
if(shouldSquareUpdate){
y += dy;
}
if(y + 90 > height || y < 0) {
dy *= -1;
}
}
void keyPressed(){
// toggle boolean (if true, set it to false, if false, set it to true)
shouldSquareUpdate = !shouldSquareUpdate;
}
Относительно
как мне сделать мой квадратное движение за 8 равных шагов?
Это должно быть вопросом простого обновления значения dy
, которое вы в настоящее время устанавливаете на 1 (пиксель p er frame) быть восьмой от общего расстояния перемещения (высоты):
например
// in setup()
dy = height / 8;
Имейте в виду, что 720/8 = 90 пикселей на кадр с 60 кадрами в секунду это было бы 5400 пикселей в секунду: как быстро, чтобы движение было разборчивым.
Вы можете использовать тот же принцип, чтобы, возможно, переместить блок на 32 равных шага? например,
void setup() {
size(1280, 720);
surface.setResizable(true);
// make square move in 32 equal steps: increment 32th of the total height
dy = height / 32;
}