arrays - 如何在处理中将数组数据与 frameCount 组合
问题描述
我试图让带圆圈的对象随着时间的推移出现——每个都是独立的——并在 30 帧后将它们的位置更改为随机选择的新对象。现在——我只能让他们在 30 帧之后改变他们的位置,但是一次都在一起……我花了一段时间来将它们组合成改变所有 30 帧的方式,现在我想解开它们。那是如何实现的?顺便说一句——“数字数组”最初给出的值是 0 的 6 倍,可能是因为它连接到循环?有没有办法来解决这个问题?
在这里你可以看到主要代码:
Circle[] circles = new Circle[6];
color c1 = color(255, 255, 255);
color c2 = color(0, 0, 255);
color c3 = color(255, 255, 255);
color[] colors = { c1, c2, c3 };
int[] numbers = new int[6];
int index;
float rX;
float rY;
void setup () {
size(540, 960);
randomizePositions();
index = 5;
numbers[0] = 5;
numbers[1] = 10;
numbers[2] = 15;
numbers[3] = 20;
numbers[4] = 25;
numbers[5] = 30;
}
void randomizePositions() {
for (int i = 0; i <circles.length; i++) {
rX = random(width);
rY = random(height);
index = int(random(numbers.length));
circles[i] = new Circle(rX, rY, colors[int(random(0, colors.length))], numbers[index]);
}
}
void draw() {
background(#c1c1c1);
for (int i = 0; i < circles.length; i++) {
circles[i].display();
}
if (frameCount % 30 == 0) {
randomizePositions();
}
}
这是对象:
class Circle {
int size;
int number;
float x;
float y;
color col;
Circle(float tempX, float tempY, color tempC, int tempNumber) {
size = 20;
x = tempX;
y = tempY;
col = tempC;
number = tempNumber;
}
void display() {
fill(col);
noStroke();
ellipse(x, y, size/2.5, size/2.5);
for (int i = 0; i < number; i++) {
noFill();
stroke(col);
strokeWeight(size/2.5);
ellipse(x, y, i*size, i*size);
}
}
}
感谢您提供任何帮助或提示!
解决方案
您可以从随机位置使用相同的逻辑,但在 for 循环之外:
void randomizePosition() {
int randomCircleIndex = int(random(circles.length));
int randomColorIndex = int(random(colors.length));
int randomNumerIndex = int(random(numbers.length));
rX = random(width);
rY = random(height);
circles[randomCircleIndex] = new Circle(rX, rY, colors[randomColorIndex], numbers[randomNumerIndex]);
}
如果您想避免每次都创建一个新对象,您可以在可重用函数中移动构造函数功能:
Circle[] circles = new Circle[6];
color c1 = color(255, 255, 255);
color c2 = color(0, 0, 255);
color c3 = color(255, 255, 255);
color[] colors = { c1, c2, c3 };
int[] numbers = new int[6];
int index;
float rX;
float rY;
void setup () {
size(540, 960);
randomizePositions();
index = 5;
numbers[0] = 5;
numbers[1] = 10;
numbers[2] = 15;
numbers[3] = 20;
numbers[4] = 25;
numbers[5] = 30;
}
void randomizePositions() {
for (int i = 0; i <circles.length; i++) {
rX = random(width);
rY = random(height);
index = int(random(numbers.length));
circles[i] = new Circle(rX, rY, colors[int(random(0, colors.length))], numbers[index]);
}
}
void randomizePosition() {
int randomCircleIndex = int(random(circles.length));
int randomColorIndex = int(random(colors.length));
int randomNumerIndex = int(random(numbers.length));
rX = random(width);
rY = random(height);
circles[randomCircleIndex].reset(rX, rY, colors[randomColorIndex], numbers[randomNumerIndex]);
}
void draw() {
background(#c1c1c1);
for (int i = 0; i < circles.length; i++) {
circles[i].display();
}
if (frameCount % 30 == 0) {
randomizePosition();
}
}
class Circle {
int size;
int number;
float x;
float y;
color col;
Circle(float tempX, float tempY, color tempC, int tempNumber) {
reset(tempX, tempY, tempC, tempNumber);
}
void reset(float tempX, float tempY, color tempC, int tempNumber){
size = 20;
x = tempX;
y = tempY;
col = tempC;
number = tempNumber;
}
void display() {
fill(col);
noStroke();
ellipse(x, y, size/2.5, size/2.5);
for (int i = 0; i < number; i++) {
noFill();
stroke(col);
strokeWeight(size/2.5);
ellipse(x, y, i*size, i*size);
}
}
}
此外,如果您想一次重置一个圆但顺序(不是从数组中随机选择一个),您需要使用一个单独的整数来计算当前选择的圆索引,以便它可以递增:
Circle[] circles = new Circle[6];
color c1 = color(255, 255, 255);
color c2 = color(0, 0, 255);
color c3 = color(255, 255, 255);
color[] colors = { c1, c2, c3 };
int[] numbers = new int[6];
int index;
float rX;
float rY;
int currentCircleIndex = 0;
void setup () {
size(540, 960);
randomizePositions();
index = 5;
numbers[0] = 5;
numbers[1] = 10;
numbers[2] = 15;
numbers[3] = 20;
numbers[4] = 25;
numbers[5] = 30;
}
void randomizePositions() {
for (int i = 0; i <circles.length; i++) {
rX = random(width);
rY = random(height);
index = int(random(numbers.length));
circles[i] = new Circle(rX, rY, colors[int(random(0, colors.length))], numbers[index]);
}
}
void randomizePosition() {
int randomColorIndex = int(random(colors.length));
int randomNumerIndex = int(random(numbers.length));
rX = random(width);
rY = random(height);
circles[currentCircleIndex].reset(rX, rY, colors[randomColorIndex], numbers[randomNumerIndex]);
println("reset circle index: " + currentCircleIndex);
// increment index (and reset after last index using %)
currentCircleIndex = (currentCircleIndex + 1) % circles.length;
}
void draw() {
background(#c1c1c1);
for (int i = 0; i < circles.length; i++) {
circles[i].display();
}
if (frameCount % 30 == 0) {
randomizePosition();
}
}
class Circle {
int size;
int number;
float x;
float y;
color col;
Circle(float tempX, float tempY, color tempC, int tempNumber) {
reset(tempX, tempY, tempC, tempNumber);
}
void reset(float tempX, float tempY, color tempC, int tempNumber){
size = 20;
x = tempX;
y = tempY;
col = tempC;
number = tempNumber;
}
void display() {
fill(col);
noStroke();
ellipse(x, y, size/2.5, size/2.5);
for (int i = 0; i < number; i++) {
noFill();
stroke(col);
strokeWeight(size/2.5);
ellipse(x, y, i*size, i*size);
}
}
}
推荐阅读
- salesforce-marketing-cloud - 当我们在 DE 中输入用户时如何自动向用户发送电子邮件
- byte-order-mark - 显示 Axapta 2009 中每个 BOM 的 Sql 查询
- python - Python:在函数内复制字典也会修改原始副本
- python - 我的函数将两个字符串作为参数作为输入,并在 python 的字符串中找到它的出现。计数不正确,有几个字母
- python - python-pptx:有什么方法可以使文本垂直?
- registration - Sencha Architect 2.2.3 注册
- reactjs - 如何在nextjs(通过reactjs)多个页面和组件中共享公共数据?
- r - 线性混合效应模型中的奇点
- google-apps-script - MailApp.sendEmail 失败(错误:异常:无效电子邮件)
- python - 在 ib-insync 中捕获异常