Как сохранить переменную в цикле, чтобы использовать ее позже? - PullRequest
2 голосов
/ 08 ноября 2019

Я хочу создать программу, которая устанавливает эллипсы рядом друг с другом до тех пор, пока один из них не коснется границы моего холста, а затем продолжит движение в другом направлении. К сожалению, он работает только в одном направлении и останавливается, когда достигает правой границы. Есть ли способ сохранить переменную sx в какой-то момент, чтобы снова использовать ее во втором операторе if?

void setup() {
    size(700, 500);
    frameRate(20); // frame rate = 20 Hz
}

int sx=50;
int sy=50;
int dx=15;

void draw() {

    if(sx<width){
        ellipse(sx,sy,20,20); 
        sx=sx+dx;

        if(sx>width){
            sx=sx-dx;
        }
    }
}

1 Ответ

3 голосов
/ 08 ноября 2019

sx находится в глобальной области видимости, поэтому нет необходимости его «хранить», поскольку значение является постоянным.
То, что вы хотите сделать, довольно просто. Ключ dx, а не sx. Если эллипс достигает границы окна, направление должно быть изменено. Это может быть достигнуто путем инвертирования dx.

Invert dx (dx *= -1), когда sx находится на правой границе (sx >= width) или левой границе (sx <= 0). например:

void setup() {
    size(700, 500);
    frameRate(20); // frame rate = 20 Hz
}

int sx=50;
int sy=50;
int dx=15;

void draw() {

    background(196);
    ellipse(sx,sy,20,20); 
    sx=sx+dx;

    if (sx >= width || sx <= 0 ){
        dx *= -1;
    }
}
...