
Processingで描いた、かわいいモンスター達のサイト
企画良し、アイディア良し、プログラムサイズも小さくて勉強になる。
この中から、BenjaminさんのモンスタープログラムWorm Monstersのソースをお勉強。
ムーミンに出てきたニョロニョロみたいです。
修正したプログラムの実行結果は、ここ
ちょっと修正したニョロニョロ
以下、プログラムの解析。右目と左目を別々に描くのは冗長かな。
Monster [] monster; //モンスター達を扱う広域変数
void setup(){ //初期化
size(500, 300); //キャンパスサイズ
frameRate(25); //フレームレート設定、一秒間の描写回数、drow()の実行回数
smooth(); //描写を滑らかにする
monster = new Monster[20]; //モンスターの数を決定
int colorOfMonster = monster.length * 5;
for (int i=0; i < monster.length; i++){
monster[i]= new Monster(); //新オブジェクト
monster[i].monColor = colorOfMonster; //色プロパティを設定
colorOfMonster -=5; //次のカラーを決定、最後は0になる?
}
}
void draw(){
background(255); //背景色 255 = 白
fill(0); //(次の図形を)黒で埋める
rect(0, height-50, width, 50);
for(int i=0; i < monster.length; i++){
monster[i].drawMonstaer(abs(monster[i].posX - mouseX)/10, int(random(0,40)));
}
}
class Monster {
int posX = int(random(0, width));
int posY = height-50;
int monH = int(random(1,5));
int monW = int(random(30,50));
int deform = 30; // ゆがみ
int monColor;
void drawMonster(float vH, int closeEys){
if(vH > 4){
fill(monColor);
beginShape(); //ここから多角形、ベジェ曲線による図形を開始
vertex(posX - monW/2, posY); //基点。ベジェ曲線の最初のアンカーポイント
//ベジェ曲線を描く。コントロールポイント1,コントロールポイント2,最終アンカー
bezierVertex(posX - monW/2 + deform, posY, posX - deform, posY - (monH * vH), posX, posY - (monH * vH));
bezierVertex(posX + deform, posY - (monH * vH), posX + monW/2 - deform, posY, posX + monW/2, posY);
endShape(); //多角形 終了
}
//ある程度高いやつで、目を閉じているやつは、目を描く(まばたき)
if(vH > 11 && closeEyes > 0){
//右目
fill(255); //白
noStroke(); //アウトラインは描かない
ellipse(posX - 3, posY - (monH * vH)+10, 8, 8); //目
fill(0); //黒
pushMatrix(); //図形を配置
translate(posX - 3, posY - (monH * vH) + 10); //図形を移動
//マウスの方向?に座標を回転させる
rotate(atan2(mouseY - (posY - (monH * vH) + 10), mouseX - posX - 3));
ellipse(1, 0, 2, 2); //瞳を描き
popMatrix(); //(元座標に戻って)瞳図形を配置。
//左目
fill(255);
ellipse(posX + 3, posY - (monH * vH) + 10, 8, 8);
fill(0);
pushMatrix();
translate(posX + 3, posY - (monH * vH) + 10);
rotate(atan2(mouseY - (posY - (monH * vH) + 10), mouseX - posX + 3));
ellipse(1, 0, 2, 2);
popMatrix();
}
}
}
ベジェー曲線については、ここを参考に理解しました。
http://musashi.or.tv/fontguide_doc3.htm
