Java в обработке: Сделайте круг по часовой стрелке вокруг окна бесконечно

#java #processing

Вопрос:

Мой текущий код показывает круг, который один раз обходит окно по часовой стрелке, а затем удаляется с экрана в правом верхнем углу, когда он обходит его во второй раз. Как я могу отредактировать свой код, чтобы круг продолжал бесконечно вращаться по экрану и никогда не съезжал с края?

 // cirlce radius
final int radius = 25; 
// circle x position 
int xPos = 15; 
int yPos = 15;
int xDir = 4; 
int yDir = 0;


void setup()
{
 size(500, 500); 
 background(177, 237, 247);
}

void draw()
{
  background(177, 237, 247); 
  ellipse(xPos, yPos, radius, radius); 
  
  xPos = xPos   xDir; 
  yPos = yPos   yDir;
  
  if (xPos > width - 15) { 
    yDir = 4;
    xDir = 0;
} if (yPos > height - 15) {
  xDir = -4; 
  yDir = 0;
} if (xPos < width - 485) {
  xDir = 0; 
  yDir = -4;
} if (yPos < height - 485) {
  yDir = 0; 
  xDir = 4;
}
}
 

Комментарии:

1. Знаете ли вы else ключевое слово? Вам нужно выполнить ровно одно условие.

2. опубликуйте рабочий пример?

Ответ №1:

3-й и 4-й аргументы ellipse -это длина оси, а не длина полуоси. Поэтому вам нужно умножить radius на 2.
Когда эллипс достигает края, вам нужно ограничить положение эллипса краем:

 // cirlce radius
final int radius = 25; 
// circle x position 
int xPos = radius; 
int yPos = radius;
int xDir = 4; 
int yDir = 0;


void setup() {
   size(500, 500); 
   background(177, 237, 247);
}

void draw()
{
    background(177, 237, 247); 
    ellipse(xPos, yPos, radius*2, radius*2); 
    
    xPos = xPos   xDir; 
    yPos = yPos   yDir;
    
    if (xPos > width - radius) {
        xPos = width - radius;
        yDir = 4;
        xDir = 0;
    } 
    if (yPos > height - radius) {
        yPos = height - radius;
        xDir = -4; 
        yDir = 0;
    } 
    if (xPos < radius) {
        xPos = radius;
        xDir = 0; 
        yDir = -4;
    } 
    if (yPos < radius) {
        yPos = radius;
        yDir = 0; 
        xDir = 4;
    }
}