Как сделать так, чтобы строка в коде отскакивала от стенок холста? - PullRequest
3 голосов
/ 12 апреля 2020

Я использую обработку, и я пытаюсь получить прямоугольник, чтобы изменить его направление, когда он достигает боковой части экрана. В частности, когда край прямоугольника достигает стороны окна, прямоугольник должен изменить направление и начать движение к другой стороне, а не продолжать движение вправо. Направление должно измениться, когда оно достигнет другой стороны окна.

ArrayList<Ball> balls;
int rectWidth = 20;
int rectHeight = 20;

long lastTime = 0;
long lastTimeEllipse = 0;
float tx = 0; //x value TimeLine
float tx1 = 0; //x value Ellipse
float value = 0;

void setup() {
  size(400, 200);
  frameRate(60);
  balls = new ArrayList();
  lastTime = millis();
  lastTimeEllipse = millis();
}

void draw() {
  background(0);
  if ( millis() - lastTime > 500) {
    lastTime = millis();
    //after 0.5 sec. tx moves 40px to the right
    tx += 40;
    value = 2;
  } else if (millis()-lastTime < 500) {
    value = 1;
  }
  stroke(255, 0, 0);
  line(tx, 0, tx, height);
  if (tx>=width) {
    tx=0;
    tx1 = tx1 + width;
  }

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Вам нужны значения. Текущая координата x линии и движения:

float tx = 0;
float dx = 40;

Каждый раз, когда линия достигает левой или правой части окна, изменяйте направление:

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

Пример код:

long lastTime = 0;
long lastTimeEllipse = 0;
float tx = 0;
float dx = 40;

void setup() {
    size(400, 200);
    frameRate(60);
    lastTime = millis();
    lastTimeEllipse = millis();
}

void draw() {
    background(0);
    if ( millis() - lastTime > 500) {
        lastTime = millis();
        tx += dx;
        if (tx < 0 || tx >= width) {
            dx *= -1;
        }
    }
    stroke(255, 0, 0);
    line(tx, 0, tx, height);
}
1 голос
/ 12 апреля 2020

Вам нужно создать число с плавающей точкой speed (или что-то в этом роде) и изменить его так, чтобы каждый раз x прямоугольника (который я предполагаю tx?) Меньше 0 или больше width - rectWidth .

Итак, объявите переменную:

float speed = 40;

И после перемещения прямоугольника в вашем методе рисования выполните:

if(tx <= 0 || tx >= width - rectWidth)
    speed = -speed;
...