画像とソースコードは参照サイト様からの引用。
ソースコードに理解用のコメントを自分で加えています。
クモみたい。以下はソースコード(そのまま動く)。
//思ったこと //オブジェクトの動的配列はArrayListで。 //オブジェクトがどんどん増えて重くなるのが欠点か。 //random(-2,3);でバランスが取れている理由は?((-3,3)とするとアンバランスになる) //コメントはコードから1タブおいて、//コメント。 //for()の中はキチキチ(塊で見るからそれがいいらしい) //if()の中もキチキチ //カオスな動きはgetX(), getY()から生まれている //ちなみにピクセル処理をするときloadPixels(), pixels[], updatePixels()を使うのは基本(速い) ArrayList aPoints; //配列の宣言 void setup() { //初期設定 frameRate(120); //フレームレート size(640,480,P3D); //ステージサイズの設定 background(255); //ステージの背景色 aPoints = new ArrayList(); //PointObject格納用配列 } void draw() { //この関数をループします aPoints.add(new PointObject()); //新しいPointObjectを作成して配列に格納 // loadPixels(); //ピクセルを処理する前のおまじない for (int i=0;i<aPoints.size();i++) { PointObject po = (PointObject) aPoints.get(i); //i番目のオブジェクトを取り出す po.update();//座標更新 int xx = po.getX(); int yy = po.getY(); if (xx<0||xx>=width||yy<0||yy>=height) { //PointObjectの位置が端まで来ていたら aPoints.remove(i); //PointObjectを削除 } else { pixels[xx+yy*width] = color(0,0,0); //座標(x,y)を黒く塗る } } updatePixels(); //ピクセルへの処理を反映させるためのおまじない } class PointObject { //PointObjectクラス int xx; int yy; float ss; float dss; float vx; float vy; float rr; PointObject() { //コンストラクタ 初期設定 xx = width/2; yy = height/2; vx = random(-2,3); vy = random(-2,3); ss = 0; dss = PI/random(-36,36)/4;//-20~20度(ほぼ-0.3~0.3) //ぐるんぐるん度 rr = random(20,80);//半径 } void update() { //座標情報の更新 xx+=vx; yy+=vy; ss+=dss; rr+=(0-rr)/50;//半径減衰 } int getX() { //X座標を返す return int(xx+cos(ss)*rr); } int getY() { //Y座標を返す return int(yy+sin(ss)*rr); } }