如何制作一组互相反弹的弹跳物体?

时间:2016-11-26 19:34:18

标签: java arrays object animation

我是编程的新手,我需要制作十个或更多弹跳对象,它们会相互反弹。有人可以给我一个程序的例子来创建这个吗?

编辑:这是我目前正在处理的代码。

//main program
    float hue;
    float alpha;
    float scale = 50;
    AnArray HmWd;
    void setup(){
      size(1000,1000);
      colorMode(HSB, 360, 100, 100);
      HmWd = new AnArray(scale,3);
    }

void display(){
  background(0,0,100);
  HmWd.display();
}

AnArray类:

class AnArray{
  Agent Gems1[];
  Agent Gems2[];
  Agent Gems3[];
  Agent Gems4[];
  Agent Gems5[];
  float size;
  int quant;
  int ol = 1;
  AnArray(float _size,int _quant){
    size = _size;
    quant = _quant;
    for(int i=0; i<quant;i++){
      Gems1[i]=new Agent(size,ol); //I'm getting a "NullPointerException" Error here
      ol++;
      Gems2[i]=new Agent(size,ol);
      ol++;
      Gems3[i]=new Agent(size,ol);
      ol++;
      Gems4[i]=new Agent(size,ol);
      ol++;
      Gems5[i]=new Agent(size,ol);
      ol=1;
    }
  }
  void display(){
    for(int i=0; i<quant;i++){
      Gems1[i].display();
      Gems2[i].display();
      Gems3[i].display();
      Gems4[i].display();
      Gems5[i].display();
    }
  }
}

代理类:

class Agent{
  PVector position, speed;
  float r;
  float  highlightHue, basicHue;

  Agent(float _r,int c){
    position = new PVector((random(100,900)),(random(100,900)));
    r = _r;  ///radius is for test intersection
    speed  = new PVector(2,2);
    highlightHue = 72+(5*c);
    basicHue = 190+(5*c);
    hue = basicHue;
  }

  PVector getCenter(){
  PVector center = new PVector();
   center.x = position.x ;
   center.y = position.y ;
   return center;
 }

  void highlight(){
    hue = highlightHue;
  }

  void reverseSpeed(){
    speed.x *= -1;
  }

  void display(){
    colorMode(HSB);
    fill(hue, 200,200,alpha);
    stroke(50, alpha);
    ellipse(position.x,position.y, 2*r,2*r); 
    hue= basicHue;
  }

   void move(){
    if( position.x >width || position.x < 0){
      speed.x *= -1;
    }
    if( position.y > height || position.y < 0){
      speed.y *= -1;
    }
    position.add(speed);
  }

  void grow(){
    if( r < 150){
         r++;
         alpha = alpha > 50? alpha -= 2: 50;  //ternary assignment operator
    }
  }

  void shrink(){
    if( r>10){
         r--;
         alpha = alpha< 200? alpha +=2: 200;
    }
  }

  boolean intersect( Agent a){
    boolean isIntersect = false;
    float d = PVector.dist(position,a.position);
    if(d < this.r + a.r){
      isIntersect= true;
    }
   return isIntersect;
  }
}

0 个答案:

没有答案