#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;
}
}