-1

ステージ上のどこをクリックしても、新しいパーティクルを作成できるようにしたいと考えています。マウス部分の追加に行き詰まっており、パラメーターを追加/渡しようとしましたが、パラメーターを設定しようとすると常にエラーが発生します。助言がありますか?

これは私の現在のコードです:

float parSpeed = 1; //speed of particles
int   nParticles = 1000; //# of particles
Particle[] particles;

void setup() {
  size(700,700); //size of image (8.5 x 11 @ 300px) is 3300,2550)
  frameRate(60); //framerate of stage
  background(0); //color of background
  particles = new Particle[nParticles];

//start particle array
for(int i=0; i<nParticles; i++) {
    particles[i] = new Particle();
  }
}

void draw() {
  fill(0,0,0,5); //5 is Alpha
  rect(0,0,width,height); //color of rectangle on top?
  translate(width/2, height/2); //starting point of particles

//start particle array
  for(int i=0; i<nParticles; i++) {
    particles[i].update();
    particles[i].show();
  }
}

//Particle Class
class Particle {
  PVector pos; //position
  float angle; //angle
  float dRange; //diameter range
  float dAngle; //beginning angle?
  color c; //color

  Particle() {
    pos = new PVector(0,0);//new position for the particles.
    angle  = 1; //controls randomization of direction in position when multiplied
    dRange = 0.01; // how big of a circle shold the particles rotate on
    dAngle = 0.15; // -- maximum angle when starting
    c = color(0,0,random(100, 255)); //set color to random blue
  }

  void update() {
    float cor = .25*dRange*atan(angle)/PI; 
    float randNum = (random(2)-1)*dRange-cor;  //Random number from (-dRange, dRange)
    dAngle+=randNum;                       //We don't change the angle directly
                                       //but its differential - source of the smoothness!

    angle+=dAngle;                         //new angle is angle+dAngle -- change angle each frame

    pos.x+=parSpeed*cos(angle);//random direction for X axis multiplied by speed
    pos.y+=parSpeed*sin(angle);//rabdin durectuib for y axis multiplied by speed
  }

void show() {
    fill(c); //fill in the random color
    noStroke(); //no stroke
    ellipse(pos.x,pos.y,10,10); //make the shape
    smooth(); //smooth out the animation
  }
}

void keyPressed() {
  print("pressed " + int(key) + " " + keyCode);
  if (key == 's' || key == 'S'){
    saveFrame("image-##.png");
  }
}

void mouseReleased() {
   print("mouse has been clicked!"); 
}
4

1 に答える 1

0

mouseReleased () メソッドを上書きします。

そこでは、次のことを行う必要があります。

  1. マウスの位置をキャプチャする
  2. 新しい粒子を作成します
  3. 新しく作成されたパーティクルの位置を更新します。
  4. それを配列に追加します(粒子システム)

これは単純に見えるかもしれませんが、配列はサイズを変更できないことに注意する必要があります。システムへのパーティクルの追加と削除を処理する ParticleSystem クラスを作成することをお勧めします。

編集:パーティクルの配列の代わりに ArrayList の使用を検討することをお勧めします。これを見てください

擬似コードでは、これは次のようになります。

void mouseReleased() {
    int particleX = mouseX;
    int particleY = mouseY;

    Particle P = new Particle(); 
    P.setPos ( new PVector ( particleX, particleY ) ); // this needs to be implemented

    ParticleSystem.add ( P ); // this needs to be implemented
}

これが良いスタートになることを願っています。

ああ

于 2013-01-03T04:18:25.523 に答える