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
0 件のコメント:
コメントを投稿