Preview
// 光のエフェクト
let Lights = [];
let maked = 0, update = 0;
let stLocX, stLocY, texAlpha = 0;
let textFlag = false;
let nameFont;
// 回転パターンの変数
let theta = 0.0, S = 1.0;
let reverse = false;
function setup() {
createCanvas(1920, 1080);
frameRate(60);
strokeWeight(3);
colorMode(HSB, 359, 99, 99, 99);
// create a first light
Lights[0] = new Light(width - 20, height / 2, width - 20, 347, 83, 99, 99, 0);
// create font
nameFont = "HGSSoeiKakugothicUB";
textAlign(CENTER, CENTER);
}
function draw() {
background(0);
// 光のエフェクトを描画
for (let i = 0; i <= maked; i++) {
if (Lights[i]) Lights[i].exe();
}
// 新しい光の作成
drawingContext.filter = 'blur(24px)';
if (frameCount % int(random(15, 25)) === 0) {
Create();
}
drawingContext.filter = 'none';
// 回転パターンを上に重ねる
push();
translate(width / 2, height / 2);
scale(S);
if (mouseX < width / 2) {
fill(255, 0, 0);
} else {
fill(0, 0, 255);
}
for (let n = 1; n < 4; n++) {
let col = color(this.hue, this.satu, this.brig, this.alpha);
rotate(radians(theta));
ellipse((150 * n) - 25, -25, 50, 50);
noFill();
arc(0, 0, 150 * n, 150 * n, 0, theta);
fill(col);
if (n != 0) {
ellipse((-150 * n) - 25, -25, 50, 50);
noFill();
arc(0, 0, 300 * n, 300 * n, 0, theta);
fill(col);
}
}
pop();
// 回転方向の変更
if (theta > 180) {
theta = 0.0;
reverse = true;
} else if (theta < -180) {
theta = 0.0;
reverse = false;
}
// 回転角度の増減
if (!reverse) {
theta += 3;
} else {
theta -= 3;
}
// テキスト表示
indication();
}
function Create() {
maked++;
if (maked >= 10) maked = 9;
update++;
if (update >= 10) update = 0;
stLocX = width - random(50, 200);
stLocY = height / 2 - random(-100, 100);
Lights[update] = new Light(stLocX, stLocY, stLocX, random(320, 359), random(0, 99), 99, 99, update);
}
function indication() {
if (frameCount % 300 === 0) {
textFlag = !textFlag;
if (!textFlag) texAlpha = 0;
}
if (textFlag) {
texAlpha = min(texAlpha + 1, 99);
fill(0, 0, 99, texAlpha);
textFont(nameFont, 72);
text("”SESSIONS ”", width / 2, height / 2 + random(-5, 5));
} else {
texAlpha = 0;
}
}
class Light {
constructor(x, y, start_x, hue, satu, brig, alpha, update) {
this.location = createVector(x, y);
this.velocity = createVector(-30, 0);
this.start_x = start_x;
this.radi = 10;
this.hue = hue;
this.satu = satu;
this.brig = brig;
this.alpha = alpha;
this.update = update;
}
exe() {
this.display();
this.slide();
this.changeAlpha();
}
display() {
colorMode(HSB, 359, 99, 99, 99);
let col = color(this.hue, this.satu, this.brig, this.alpha);
fill(col);
stroke(col);
ellipse(this.location.x, this.location.y, this.radi, this.radi);
line(this.location.x, this.location.y, this.start_x, this.location.y);
}
slide() {
this.location.add(this.velocity);
}
changeAlpha() {
if (this.location.x < 0 && this.alpha >= 20) {
this.alpha -= 2.5;
} else {
this.alpha = min(this.alpha + 40, 99);
}
}
}
function keyPressed() {
if (key === 'l' || key === 'L') {
S += 0.1;
} else if (key === 's' || key === 'S') {
S -= 0.1;
}
}