处理2.1.1 - 屏幕上同时有多个项目?

时间:2014-03-23 09:51:36

标签: java animation processing

我对编程比较陌生,我试图创建一个程序,创建一个紫色的球,我点击它向右移动,直到它离开屏幕,我可以有无限的球立刻在屏幕上。我已经制作了一个这样做的程序,但是我一次只能在屏幕上有一个,如果我第二次点击,第一个球就会消失并被一个新球取代。哦,当我第二次点击时,球没有从光标所在的位置开始,它从最后一个球在X轴上的位置开始。 请帮忙!

以下是代码:

int moveX, moveY;

void setup() {
  background(255);
  moveY = 200;
  moveX = 0;
  size(500,400);
}

void mouseClicked() {
moveY = mouseY;
  moveX++;

}

void draw() {
  if (moveX >= 1){
    background(255);
    fill(255, 0, 255);
    ellipse(moveX, moveY, 40, 40);
    moveX++;
    }
}

1 个答案:

答案 0 :(得分:1)

正如donfuxx建议的那样,给每个球它自己的坐标。 一种方法是使用数组来存储多个值(坐标)。

要做到这一点,你需要熟悉for循环和数组。 起初他们可能看起来很可怕,但是一旦掌握了它们,他们就会变得非常容易。 无论您何时想到需要重复的情况,您都可以使用for循环来让您的生活更轻松。

For循环具有以下语法:

for keyword (3 elements: a start point,an end point(condition) and an increment,(separated by the ; character)

让我们假设你想一次从一个步骤(0)移动到b(10):

for(int currentPos = 0 ; currentPos < 10; currentPos++){
  println("step: " + currentPos);
}

如果你可以走路,你也可以跳过:)

for(int currentPos = 0 ; currentPos < 10; currentPos+=2){
  println("step: " + currentPos);
}
如果你愿意,甚至倒退:

for(int currentPos = 10 ; currentPos > 0; currentPos--){
  println("step: " + currentPos);
}

当遍历所有类型的数据(场景中球的坐标等)时,这非常有用。

您如何整理数据?您将它放在列表或数组中。 数组包含相同类型的元素并具有设置长度。 声明数组的语法如下:

ObjectType[] nameOfArray;

你可以初始化一个空数组:

int[] fiveNumbers = new int[5];//new keyword then the data type and length in sq.brackets

或者您可以使用值初始化数组:

String[] words = {"ini","mini","miny","moe"};

使用方括号和要访问的列表中对象的索引访问数组中的元素。数组具有长度属性,因此您可以轻松计算对象。

background(255);
String[] words = {"ini","mini","miny","moe"};
for(int i = 0 ; i < words.length; i++){
   fill(map(i,0,words.length, 0,255));
   text(words[i],10,10*(i+1));
}

现在回到你原来的问题。 这是使用for循环和数组的代码:

int ballSize = 40;
int maxBalls = 100;//maximum number of balls on screen
int screenBalls = 0;//number of balls to update
int[] ballsX = new int[maxBalls];//initialize an empty list/array of x coordinates
int[] ballsY = new int[maxBalls];//...and y coordinates
void setup() {
  size(500, 400);
  fill(255, 0, 255);
}
void mouseClicked() {
  if (screenBalls < maxBalls) {//if still have room in our arrays for new ball coordinates
    ballsX[screenBalls] = mouseX;//add the current mouse coordinates(x,y)
    ballsY[screenBalls] = mouseY;//to the coordinate arrays at the current ball index
    screenBalls++;//increment the ball index
  }
}

void draw() {
  println(screenBalls);
  background(255);
  for (int i = 0 ; i < screenBalls; i++) {//start counting from 0 to how many balls are on screen
    ballsX[i]++;//increment the x of each ball
    if(ballsX[i]-ballSize/2 > width) ballsX[i] = -ballSize/2;//if a ball goes off screen on the right, place it back on screen on the left
    ellipse(ballsX[i], ballsY[i], ballSize, ballSize);//display each ball
  }
}

有多种方法可以解决这个问题。数组具有固定的大小。如果你不想受到约束,可以使用ArrayList(一种可变大小的数组)。稍后您可能想要了解如何制作可以更新和绘制自己的object。玩得开心!