p5.jsを使って、円周上に沿ってアニメーションする処理を実装してみます。
サンプルコード
JavaScript
var angle = 0; // 角度 var r = 100; // 円周の半径 function setup() { // 最初に実行される関数 createCanvas(640, 480); // canvasの作成 noStroke(); } function draw() { // 毎フレーム実行される関数 background(255); // canvasの塗りつぶし push(); // 座標をcanvasの中心にするため一時的に保存 translate(width / 2, height / 2); fill(127); ellipse(0, 0, r * 2, r * 2); // 円周の描画 x = sin(radians(angle)) * r; // 円周上のX座標の位置 y = cos(radians(angle)) * r; // 円周上のY座標の位置 fill(0); ellipse(x, y, 20, 20); // アニメーションする円の描画 pop(); angle += 1; }
noStroke() | ストロークの描画を無効にする。 |
---|---|
background(color) | canvasの背景色を指定。 |
push() | 描画スタイルや座標の設定を一時的に保存する。 pop()で元に戻る。 |
pop() | push()で設定した描画スタイルや座標の設定を元に戻す。 |
translate(x, y) | canvasの座標を移動。 |
width | canvasの幅を返す。 |
height | canvasの高さを返す。 |
sin(angle) | 角度の正弦を計算して返す。 |
cos(angle) | 角度の余弦を計算して返す。 |
radians(degrees) | degreesをラジアン単位に変換して返す。 |
上記サンプルの応用で、アニメーションする円のスタイルや位置を変更して増やすことで、ローディングのようにすることもできます。
JavaScript
var angle = 0; // 角度 var r = 15; // 円周の半径 function setup() { // 最初に実行される関数 createCanvas(100, 100); // canvasの作成 noStroke(); } function draw() { // 毎フレーム実行される関数 background(255); // canvasの塗りつぶし push(); // 座標をcanvasの中心にするため一時的に保存 translate(width / 2, height / 2); for (var i = 0; i < 8; i++) { x = sin(radians(angle - (i * 45))) * r; // 円周上のX座標の位置 y = cos(radians(angle - (i * 45))) * r; // 円周上のY座標の位置 fill(35 * i); ellipse(x, y, 10 - i, 10 - i); // アニメーションする円の描画 } pop(); angle += 7; }
【参考サイト】
コメントが承認されるまで時間がかかります。