### アメーバの凸部分を伸びたり縮んだりさせたい
processingで、以下の画像のようなアメーバを作りました。
この動きだけではなく、アメーバの凸部分だけ伸びたり縮んだりさせたいのですが、
どうも上手にいきません。
まずはアメーバを試しに動かしてみようと思って見たのですが、
下の画像のようになってしまいます。
これを伸びきったまんまではなく伸びたり縮んだりを(できればランダムに)
繰り返すようにしたいのですが、この先どうしたらいいでしょうか。。。
試しにif構文を使って
if(x >600){
x -= 1;
y += 1;
}
を挿入して見たのですが、実行してみると下のようにxの動きが止まってしまいます。
私の今の知識では手詰まりなので、詳しい方の助力をいただけると幸いです。
下にコードを載せてありますので、是非よろしくお願いしますm( _ _ )m
####途中でxが止まってしまうコード
javascript
1float x; //少数型の変数xを定義(右上) 2float y; //少数型の変数yを定義(右上) 3float ax; //少数型の変数axを定義(右) 4float bx; //少数型の変数bxを定義(右下) 5float by; //少数型の変数byを定義(右下) 6float cy; //少数型の変数cyを定義(下) 7float dx;//少数型の変数dxを定義(左下) 8float dy; //少数型の変数dyを定義(左下) 9float ex; //少数型の変数exを定義(左左下) 10float ey; //少数型の変数eyを定義(左左下) 11float fx; //少数型の変数fxを定義(左左上) 12float fy; //少数型の変数fyを定義(左左上) 13float gy; //少数型の変数gyを定義(上) 14 15 16 17void setup(){ 18 19 size(500,500) ; 20 background( #ffffff ); 21 22} 23 24 25 26void draw(){ 27 28 29 if(x + 500 >= 600 ){ 30 31 x -= 1; 32 y -= 1; 33 34 } 35 36strokeWeight( 4 ); 37stroke( 0,200,0 ); 38fill( 0,255,0 ); 39 40beginShape();//アメーバの形 41 42x += 1;//毎フレームでアメーバの角のx座標を1ずつ増やす 43y -= 1; //毎フレームでアメーバの角のy座標を1ずつ減らす 44 45ax += 1;//毎フレームでアメーバのa角のx座標を1ずつ増やす 46 47bx += 1; //毎フレームでアメーバのb角のx座標を1ずつ増やす 48by += 1; //毎フレームでアメーバのb角のy座標を1ずつ増やす 49 50cy += 1; //毎フレームでアメーバのc角のy座標を1ずつ増やす 51 52dx -= 0.5; //毎フレームでアメーバのd角のx座標を1ずつ減らす 53dy += 1;//毎フレームでアメーバのd角のy座標を1ずつ増やす 54 55ex -= 1; //毎フレームでアメーバのe角のx座標を1ずつ減らす 56ey += 0.25; //毎フレームでアメーバのe角のy座標を0.25ずつ増やす 57 58fx -= 1; //毎フレームでアメーバのf角のx座標を1ずつ減らす 59fy -= 0.25; //毎フレームでアメーバのf角のy座標を0.25ずつ減らす 60 61gy -= 1; //毎フレームでアメーバのg角のy座標を1ずつ減らす 62 63 64 65 66 67vertex( 300, 80 ); 68 69bezierVertex( 240,10, 220, gy + 20, 200,80);//g頂点 70bezierVertex(200,80,200,120,130,120);//凹み 71 72bezierVertex(130,120,fx + 20,fy + 120,100,180);//f頂点 73bezierVertex(100,180,180,220,90,280);//凹み 74 75bezierVertex(90,280,-10 + ex, ey + 320 ,120,320);//e頂点 76bezierVertex(120,320,170,330,155,360);//凹み 77 78bezierVertex(155,360,dx + 100,dy + 600,200,400);//d頂点 79bezierVertex(200,400,225,350,250,400);//凹み 80 81bezierVertex(250,400,290,cy + 500,320,380);//c頂点 82bezierVertex(320,380,330,300,360,340);//凹み 83 84bezierVertex(360,340,bx + 450,by + 450,400,300);//b頂点 85bezierVertex(400,300,390,280,420,260);//凹み 86 87bezierVertex(420,260,ax + 580,220,420,200);//a頂点 88bezierVertex(420,200,380,180,420,130);//凹み 89 90bezierVertex(420,130, x + 500,y + 20,350,100);//頂点 91bezierVertex(350,100,325,120,300,80);//凹み 92 93endShape();//アメーバの形終わり 94 95fill(255,255,255); 96ellipse(200,100,100,100);//左目の外側 97ellipse(300,100,100,100);//右目の外側 98 99 100fill(0,200,0); 101ellipse(200,100,50,50);//左目の黒目 102ellipse(300,100,50,50);//右目の黒目 103 104 105beginShape();//核、口の形 106 107vertex(220,160); 108 109bezierVertex(240,170,260,170,280,160);//口の凹み 110bezierVertex(280,160,300,150,320,160);//右の盛り上がり 111bezierVertex(320,160,340,170,320,190);//右膨らみ 112bezierVertex(320,190,260,230,185,190);//下の膨らみ 113bezierVertex(185,190,170,180,185,165);//左膨らみ 114bezierVertex(185,165,200,150,220,160);//左の盛り上がり 115 116endShape(); 117 118 119}
####全部アメーバの凸が伸びてしまう(何も手を加えていない)コード
Javascript
1float x; //少数型の変数xを定義(右上) 2float y; //少数型の変数yを定義(右上) 3float ax; //少数型の変数axを定義(右) 4float bx; //少数型の変数bxを定義(右下) 5float by; //少数型の変数byを定義(右下) 6float cy; //少数型の変数cyを定義(下) 7float dx;//少数型の変数dxを定義(左下) 8float dy; //少数型の変数dyを定義(左下) 9float ex; //少数型の変数exを定義(左左下) 10float ey; //少数型の変数eyを定義(左左下) 11float fx; //少数型の変数fxを定義(左左上) 12float fy; //少数型の変数fyを定義(左左上) 13float gy; //少数型の変数gyを定義(上) 14 15 16 17void setup(){ 18 19 size(500,500) ; 20 background( #ffffff ); 21 22} 23 24 25 26void draw(){ 27 28strokeWeight( 4 ); 29stroke( 0,200,0 ); 30fill( 0,255,0 ); 31 32beginShape();//アメーバの形 33 34x += 1;//毎フレームでアメーバの角のx座標を1ずつ増やす 35y -= 1; //毎フレームでアメーバの角のy座標を1ずつ減らす 36 37ax += 1;//毎フレームでアメーバのa角のx座標を1ずつ増やす 38 39bx += 1; //毎フレームでアメーバのb角のx座標を1ずつ増やす 40by += 1; //毎フレームでアメーバのb角のy座標を1ずつ増やす 41 42cy += 1; //毎フレームでアメーバのc角のy座標を1ずつ増やす 43 44dx -= 0.5; //毎フレームでアメーバのd角のx座標を1ずつ減らす 45dy += 1;//毎フレームでアメーバのd角のy座標を1ずつ増やす 46 47ex -= 1; //毎フレームでアメーバのe角のx座標を1ずつ減らす 48ey += 0.25; //毎フレームでアメーバのe角のy座標を0.25ずつ増やす 49 50fx -= 1; //毎フレームでアメーバのf角のx座標を1ずつ減らす 51fy -= 0.25; //毎フレームでアメーバのf角のy座標を0.25ずつ減らす 52 53gy -= 1; //毎フレームでアメーバのg角のy座標を1ずつ減らす 54 55 56 57 58 59vertex( 300, 80 ); 60 61bezierVertex( 240,10, 220, gy + 20, 200,80);//g頂点 62bezierVertex(200,80,200,120,130,120);//凹み 63 64bezierVertex(130,120,fx + 20,fy + 120,100,180);//f頂点 65bezierVertex(100,180,180,220,90,280);//凹み 66 67bezierVertex(90,280,-10 + ex, ey + 320 ,120,320);//e頂点 68bezierVertex(120,320,170,330,155,360);//凹み 69 70bezierVertex(155,360,dx + 100,dy + 600,200,400);//d頂点 71bezierVertex(200,400,225,350,250,400);//凹み 72 73bezierVertex(250,400,290,cy + 500,320,380);//c頂点 74bezierVertex(320,380,330,300,360,340);//凹み 75 76bezierVertex(360,340,bx + 450,by + 450,400,300);//b頂点 77bezierVertex(400,300,390,280,420,260);//凹み 78 79bezierVertex(420,260,ax + 580,220,420,200);//a頂点 80bezierVertex(420,200,380,180,420,130);//凹み 81 82bezierVertex(420,130, x + 500,y + 20,350,100);//頂点 83bezierVertex(350,100,325,120,300,80);//凹み 84 85endShape();//アメーバの形終わり 86 87fill(255,255,255); 88ellipse(200,100,100,100);//左目の外側 89ellipse(300,100,100,100);//右目の外側 90 91 92fill(0,200,0); 93ellipse(200,100,50,50);//左目の黒目 94ellipse(300,100,50,50);//右目の黒目 95 96 97beginShape();//核、口の形 98 99vertex(220,160); 100 101bezierVertex(240,170,260,170,280,160);//口の凹み 102bezierVertex(280,160,300,150,320,160);//右の盛り上がり 103bezierVertex(320,160,340,170,320,190);//右膨らみ 104bezierVertex(320,190,260,230,185,190);//下の膨らみ 105bezierVertex(185,190,170,180,185,165);//左膨らみ 106bezierVertex(185,165,200,150,220,160);//左の盛り上がり 107 108endShape(); 109 110 111}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/25 13:44 編集
2019/11/23 05:05
2019/11/23 08:27
2019/11/25 11:45
2019/11/25 13:46
2019/11/25 14:08