ー オノマトペ ー  sono3

今回もオノマトペな動きを作ってみましょう.
オノマトペは日本語では擬態語や擬音語と訳され,「ふわふわ」や「ぴかぴか」といった状態や自然音を言葉で表したものの総称です.
前回までに「ふわふわ」と「どきどき」いう動きをつくってみました.今回は「ぐらぐら」をつくってみましょう。

「ぐらぐら」
ふだんじっとしているものが揺れるときにこのような表現をします.この「ぐらぐら」を実際にプログラミングしてみましょう.
まず,この ぐらぐら を成分分析します.これは主観によりますが,私は,このぐらぐらを

いつもは止まっているが突然揺れだすもの

と考えました.では,これをプログラミングしてみましょう.
ソースコードはこうなります.

 
point[] p;

[setup]{
p = new point[20];
for(int i = 0; i < p.length; ++i){
p[i] = new point(200, i*20+30);
}
}

[paint]{
clearAll();
for(int i = 1; i < p.length; ++i){
drawLine(p[i-1].x, p[i-1].y, p[i].x, p[i].y);
}
}

[always]{
for(int i = 0; i < p.length; ++i){
p[i].pushTo(200, i*20+30);
}
}

[everyterm, 5]{
p[0].pushTo(mouseX, p[0].y);
for(int i = 1; i < p.length; ++i){
p[i].pushTo(p[i-1].x, p[i].y);
}
}


実行結果はこうなります.

まず
point p[]; で基準になる点群 p を準備し,それをsetup内の
p = new point[20];
for(int i = 0; i < p.length; ++i){
p[i] = new point(200, i*20+30);
}
によって初期化しています.pは配列で宣言していて上から順番に位置を決めています.
また,物体を実際に絵としてみせるためpaint内で
clearAll();
for(int i = 1; i < p.length; ++i){
drawLine(p[i-1].x, p[i-1].y, p[i].x, p[i].y);
}
として,p を上から順番に線で結んでいます.

次は動きの記述です.
動きは「普段は止まっているものが」,「突然揺れだす」
と定義しました.
この「普段は止まっているもの」がalwaysの部分であり,「突然揺れだす」がeverytermに対応します.詳細には,
「いつもまっすぐになろうとしていて」を「5秒ごとに一番上の点がマウスに揺らされて,その下の点は一つ上の点に引っ張られる」としました.
[always]p[i].pushTo(200, i*20+30);でいつも点pをまっすぐにしようとします.
[everyterm, 5]p[0].pushTo(mouseX, p[0].y);で一番上の点をマウスによって押しています.そして
for(int i = 1; i < p.length; ++i){

p[i].pushTo(p[i-1].x, p[i].y);

}
でそれぞれの点が一つ上の点に引っ張られるようにしています.

このようにして,「普段は止まっているものが,突然揺れだす」すなわち「ぐらぐら」をプログラミングしました.