Обработка 3.3.7 draw () останавливает зацикливание - PullRequest
0 голосов
/ 01 июня 2018

Я написал этот код на Обработке 3.3.7, он создает шар, который подпрыгивает.

Ball b;

int n = 0;

void setup() {
  size(600, 400);

  b = new BallBuilder()
          .buildRadius(20)
          .buildXSpeed(5)
          .buildYSpeed(5)
          .buildYAcceleration(1)
          .toBall();
}

void draw() {
  background(0);
  n++;
  print("n: " + n + " | ");
  print("xSpeed: " + b.getXSpeed() + " | ");
  println("ySpeed: " + b.getYSpeed());

  b.display();
  b.move();
}

Существует также класс Ball, который имеет следующие методы:

  void display() {
    fill(255);
    stroke(255);
    ellipse(xPosition, yPosition, radius * 2, radius * 2);
  }

  void move() {
    this.moveX();
    this.moveY();
  }

  private void moveX() {
    for(float i = 0; i <= abs(this.xSpeed); i += abs(this.xSpeed) / 10) {
      this.bounceX();
      this.xPosition += this.xSpeed / 10;
    }
  }

  private void moveY() {
    for(float i = 0; i <= abs(this.ySpeed); i += abs(this.ySpeed) / 10) {
      this.bounceY();
      this.yPosition += this.ySpeed / 10;
    }

    this.ySpeed += this.yAcceleration;
  }

  void bounceX() {
    if(!this.canMoveX()) {
      this.xSpeed = -this.xSpeed;
    }
  }

  void bounceY() {
    if(!this.canMoveY()) {
      this.ySpeed = -this.ySpeed;
    }
  }

  boolean canMoveX() {
    if(this.xPosition < radius || this.xPosition >= width - this.radius) {
      return false;
    }

    return true;
  }

  boolean canMoveY() {
    if(this.yPosition < radius || this.yPosition >= height - this.radius) {
      return false;
    }

    return true;
  }
}

И еще есть строитель и два добытчика для бала (здесь не опубликовано, так как они довольно просты).Проблема в том, что ни xSpeed, ни ySpeed ​​не могут быть установлены в 0, в противном случае код останавливается.Это означает, что мне нужно задать обе скорости при создании экземпляра, и если я установил ускорение, скорость станет равной 0, программа остановится (переменная n используется для подсчета количества циклов draw (), когдаскорость достигает 0, она прекращает увеличиваться).Чего мне не хватает?

1 Ответ

0 голосов
/ 01 июня 2018

Вы пытались отладить свой код , чтобы выяснить, где код отличается от того, что вы ожидали?

У вас есть два цикла, подобных этому:

for(float i = 0; i <= abs(this.xSpeed); i += abs(this.xSpeed) / 10) {

Выможет добавить оператор печати внутри этих циклов, например:

println("i: " + i);

Если вы это сделаете, вы обнаружите, что i всегда 0.Почему это так?

Подумайте, что произойдет, если this.xSpeed равно 0: когда этот цикл завершится?

...