如何将主要代码变成一个类(降雪)

时间:2016-04-19 17:53:22

标签: java arrays class processing processing.js

我正努力尝试使用我发现的这个免费源代码(http://solemone.de/demos/snow-effect-processing/)到一个我可以在更大,更复杂的游戏中使用的类#34;码。这是一个非常基本的降雪代码:

int quantity = 15;
float [] xPosition = new float[quantity];
float [] yPosition = new float[quantity];
int [] flakeSize = new int[quantity];
int [] direction = new int[quantity];
int minFlakeSize = 10;
int maxFlakeSize = 20;

void setup() {

  size(800, 350);
  frameRate(30);
  noStroke();
  smooth();

  for(int i = 0; i < quantity; i++) {
    flakeSize[i] = round(random(minFlakeSize, maxFlakeSize));
    xPosition[i] = random(0, width);
    yPosition[i] = random(0, height);
    direction[i] = round(random(0, 1));
  }

}

void draw() {

  background(0);

  for(int i = 0; i < xPosition.length; i++) {

    ellipse(xPosition[i], yPosition[i], flakeSize[i], flakeSize[i]);

    if(direction[i] == 0) {
      xPosition[i] += map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5);
    } else {
      xPosition[i] -= map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5);
    }

    yPosition[i] += flakeSize[i] + direction[i]; 

    if(xPosition[i] > width + flakeSize[i] || xPosition[i] < -flakeSize[i] || yPosition[i] > height + flakeSize[i]) {
      xPosition[i] = random(0, width);
      yPosition[i] = -flakeSize[i];
    }

  }

}

我还没有完全理解如何将for()循环,整数和数组分成我可以放入一个单独的类中的函数,我将其命名为Snow,以便我可以轻松地移动它并在更大的代码中操纵它。到目前为止,这是我(很多)尝试之一:

班级标签:

class Snow{


int quantity = 15;
float [] xPosition = new float[quantity];
float [] yPosition = new float[quantity];
int [] flakeSize = new int[quantity];
int [] direction = new int[quantity];
int minFlakeSize = 10;
int maxFlakeSize = 20;

 Snow(){
  frameRate(30);
  noStroke();
  smooth();
}

void display() {
    flakeSize = round(random(minFlakeSize, maxFlakeSize));
    xPosition = random(0, width);
    yPosition = random(0, height);
    direction = round(random(0, 1));
  }



void update() {

  for(int i = 0; i < xPosition.length; i++) {

    ellipse(xPosition[i], yPosition[i], flakeSize[i], flakeSize[i]);

    if(direction[i] == 0) {
      xPosition[i] += map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5);
    } else {
      xPosition[i] -= map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5);
    }

    yPosition[i] += flakeSize[i] + direction[i]; 

    if(xPosition[i] > width + flakeSize[i] || xPosition[i] < -flakeSize[i] || yPosition[i] > height + flakeSize[i]) {
      xPosition[i] = random(0, width);
      yPosition[i] = -flakeSize[i];
    }

  }

}
}

主标签:

//Ice
Snow [] flakes = new Snow[15];
int quantity = 15;

void setup(){
 size(600,800); 
 flakes = new Snow[15];

}

void draw(){
background(0);
for(int i = 0; i < quantity; i++){
flakes[i].display();
flakes[i].update();
}

}

我确定这是一种非常简单的方法来分解代码并将它们分成适当的位置,但我似乎无法掌握它。 如果有人能帮助我完成这个过程,我真的很感激。

1 个答案:

答案 0 :(得分:3)

此代码没有意义,因为Snow类似乎跟踪每个雪花,但您有多个Snow实例。

而不是尝试将随机代码复制粘贴到草图中,如果你退后一步,开始变小,试着理解代码的作用,你就会有更强的运气 然后编写自己的代码。

第1步:您是否可以创建一个封装单个雪花的数据和行为的类?

不要担心多个雪花。只是得到一些非常基本的工作。这是一个简单的示例类:

class SnowFlake{

  float x = random(width);
  float y = random(height);
  float r = random(10);

  void draw(){
   ellipse(x, y, r, r);

   y++;

   if(y > height){
     y = 0;
     x = random(width);
   }
  }
}

第2步:您可以在单一变量中使用该类来绘制单个雪花吗?

你可以像这样创建一个小例子草图:

SnowFlake snowFlake;

void setup(){
  size(500, 500);
  snowFlake = new SnowFlake();
}

void draw(){
  background(0);
  snowFlake.draw();
}

在继续前进之前,让这个单一的雪花完美运作。

第3步:既然您已经使用了单个雪花,您可以使用数组或ArrayList创建多个雪花吗?

如果您按小步骤工作,一次添加一件事很容易:

ArrayList<SnowFlake> snowFlakes = new ArrayList<SnowFlake>();

void setup() {
  size(500, 500);

  for (int i = 0; i < 100; i++) {
    snowFlakes.add(new SnowFlake());
  }
}

void draw() {
  background(0);
  for (SnowFlake snowFlake : snowFlakes) {
    snowFlake.draw();
  }
}

您无法通过尝试将代码盲目地复制粘贴到草图中来进行编程。你必须真正了解它正在做什么,而你通常最好只根据这种理解编写自己的代码。祝你好运!