【Fork No.01】reona396様のLines

【Fork No.01】reona396様のLines
  • URLをコピーしました!

reona396様のLines(https://openprocessing.org/sketch/918484)をForkさせていただき、作成した記事です。

この記事の広告は表示されないように設定しております。

この記事を書いた人
ワタタク
  • クリエイティブコーディングで制作した作品と、上達のためにやったこと・学習過程を発信
  • コンセプトは「クリエイティブコーディング1万時間の歩き方」
  • 2024年にProcessingの構文のアウトプットを終え、2025年から作品制作開始(クリエイティブコーディングで作成した作品集

目次

reona396様のLinesをForkさせていただき、つくった作品【画像とアニメーションとコード】

【Fork No.01】reona396様のLines

アニメーション。

// reona396様の作品 Lines のFork
// https://openprocessing.org/sketch/918484

const palette = ["#ff595e","#ffca3a","#8ac926","#1982c4","#6a4c93"];
let lines = [];
let linesNum = 60;

const DIST = 10;
let MAX;
const GEN = 40;

let stColor;

function setup() {
    createCanvas(windowWidth, windowHeight);
    angleMode(DEGREES);

    MAX = width > height ? width : height;
    stColor = "#ffca3a";

    for (let i = 0; i < linesNum; i++) {
        lines.push(new MyLine());
    }
}

function draw() {
    background(255);

    noStroke();
    for (let i = 0; i < lines.length; i++) {
        push();
        translate(width / 2, height + 10);
        rotate(360 * i / lines.length);
        lines[i].display();
        pop();
    }

    fill(255);
    stroke(stColor);
    strokeWeight(15);
    circle(width / 2, height + 10, MAX * 0.5);
}

class MyLine {
    constructor() {
        this.objs = [];
        this.speed = random(5, 10);
        this.h = random(10, 20);
    }

    display() {
        if (random(100) < GEN) {
            if ((this.objs.length == 0) ||
                (this.objs.length > 0 && this.objs[this.objs.length - 1].hasDistance())) {
                this.objs.push(new Obj(this.speed, this.h));
            }
        }

        for (let i = 0; i < this.objs.length; i++) {
            this.objs[i].move();
            this.objs[i].display();
        }

        if (this.objs.length > 0) {
            for (let j = this.objs.length - 1; j >= 0; j--) {
                if (this.objs[j].isFinished()) {
                    this.objs.splice(j, 1);
                }
            }
        }
    }
}

class Obj {
    constructor(tmpSpeed, tmpH) {
        this.x = 0;
        this.y = 0;
        this.speed = tmpSpeed;
        this.w = random(20, 100);
        this.h = tmpH;
        this.c = color(random(palette));
    }

    move() {
        this.x -= this.speed;
    }

    isFinished() {
        if (this.x < -MAX * 1 - this.w) {
            return true;
        } else {
            return false;
        }
    }

    hasDistance() {
        if (this.x < -(this.w + DIST)) {
            return true;
        } else {
            return false;
        }
    }

    display() {
        fill(this.c);
        rect(this.x, this.y, this.w, this.h, this.h / 2);
    }
}

作った感想

reona396様のクリエイティブコーディングに関しての書籍を読み、ご本人のOpenProcessingの作品を見てForkしたいと思った作品。

本からもかなり学ばさせていただきました。

時間をかけ、コードの構成などを分析しつつ、僕なりに変えてみました。

「クラスの中から新しいクラスをつくることができるんだ!」

MAX = width > height ? width : height;のような三項演算子を使った書き方もできるんだ!」

と思いながら、じっくり分析し、自分なりの表現にしてみました。

つくった作品数もまだ25個くらいで、クラスを使った表現にも慣れていないので分析は大変でしたが、自分なりのイメージに変更できて嬉しかったです。

まだまだコーディングに慣れていないので、たくさん見て、写経して、今回ForkさせていただきたLinesのようなコーディングができるように頑張ります。

ワタタク

それでは今日もレッツワクワクコーディング。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次