波紋を描画するサンプルコードです。水たまりに雨粒が落ちるような感じになっています。
<canvas id="canvas"></canvas>
<style>
#canvas {
background: #333;
width: 100%;
}
</style>
<script>
// Canvas要素を取得する
let canvas = document.getElementById('canvas');
// Canvasのコンテキストを取得する
let ctx = canvas.getContext('2d');
let rippleEffects = [];
// 波紋エフェクトを生成する関数を定義する
function createRippleEffect() {
// 波紋のパラメーターをランダムに生成する
let centerX = Math.random() * canvas.width;
let centerY = Math.random() * canvas.height;
let radius = 0;
let maxRadius = Math.min(centerX, centerY);
// 新しい波紋エフェクトを生成する
let rippleEffect = {
centerX: centerX,
centerY: centerY,
radius: radius,
maxRadius: maxRadius
};
// 生成した波紋エフェクトを配列に追加する
rippleEffects.push(rippleEffect);
}
// 波紋エフェクトを描画する関数を定義する
function drawRippleEffect(rippleEffect) {
// 波紋の半径を増加させる
rippleEffect.radius += 1;
// 波紋が最大半径に達した場合は、配列から波紋エフェクトを削除する
if (rippleEffect.radius > rippleEffect.maxRadius) {
let index = rippleEffects.indexOf(rippleEffect);
if (index !== -1) {
rippleEffects.splice(index, 1);
}
return;
}
// 波紋のスタイルを設定する
ctx.strokeStyle = 'rgba(255, 255, 255, 0.5)';
ctx.lineWidth = 2;
ctx.beginPath();
ctx.arc(rippleEffect.centerX, rippleEffect.centerY, rippleEffect.radius, 0, 2 * Math.PI);
ctx.stroke();
}
// アニメーションを開始する関数を定義する
function animate() {
// Canvasをクリアする
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 新しい波紋エフェクトを生成する
createRippleEffect();
// すべての波紋エフェクトを描画する
for (var i = 0; i < rippleEffects.length; i++) {
drawRippleEffect(rippleEffects[i]);
}
// 次のフレームをアニメーションする
requestAnimationFrame(animate);
}
// 初回のアニメーションを開始する
requestAnimationFrame(animate);
</script>
というのをChatGPTが作ってくれました。エンジニア要らなくなる危機感が……