gotutiyan’s blog

競技プログラミングをやったりopenframeworksでお絵かきをしたりしています。

紙吹雪

久々の投稿になります。
クリックすればするほど色とりどりの四角が現れます。動く様子が紙吹雪に見えることからこの題名に。


画面中央で一瞬重なる瞬間が気持ち良いですね〜
easyCamもついでに導入しているので、色々な角度から見ることもできます。
今回は初めて、mousePressed関数で押された瞬間のマウスの座標を使用しました。

現状、Processingと同じようにやっているつもりですが、ofTranslateとofRotateが思うように行かないというところがあるので、もう少し検証を重ねていきたいです。

コードは以下の通り。

#include "ofApp.h"
#define rep(i,j,k) for(int i=j;i<k;i++)

ofEasyCam cam;

class Hako{
    int x,y,size,color;
public:
    void init(int ex,int ey,int esize,int ecolor){
        x=ex;
        y=ey;
        size=esize;
        color=ecolor;
    }
    
    void move(){
        ofColor c; //色はHSBで指定します
        c.setHsb(color,255,255);
        ofSetColor(c);
        
        ofPushMatrix();
        ofTranslate(x,y);
        ofRotate(ofGetFrameNum());
        ofDrawRectangle(x-size/2,y-size/2,size,size);
        ofPopMatrix();
    }
};
vector<Hako> v; //インスタンスを入れる配列

void ofApp::setup(){
    ofSetFrameRate(60);
    ofNoFill();
    ofSetBackgroundColor(0);
    ofSetColor(255);
}

void ofApp::update(){
    
}

void ofApp::draw(){
    cam.begin();
    //配列に追加されたインスタンスはひたすら描画されます
    rep(i,0,v.size()){
        v[i].move();
    }
    cam.end();
}

void ofApp::mousePressed(int x, int y, int button){
    //マスウが押される度にその座標を使って、新たにインスタンスを生成、配列に追加する
    Hako h;
    h.init(x,y,100,ofGetFrameNum()%255);
    v.push_back(h);
}