シェルター
四角をたくさん書いて、色を滑らかに変えようと思っていたら、すごくメリハリがついて、濃い赤の枠のシェルターが開いて、中から出てくるような感じになったのでこの題名に。
クリックをするとシェルターがシャッと開いてまた閉じます。
「シェルター」
— ごつちやん (@gotutiyan_kapi) 2018年3月20日
クリックするとシャット開いてまた閉じるhttps://t.co/Mj1hKNvZYM#openframeworks pic.twitter.com/4VB6MLJbEx
今回は初めてmousePressed関数を使いました。
for文回してループ変数を色の部分に使って、255を越えれば255を引くという無理やり実装です。
boolは2つ使っていて、
f がマウスをクリックしてから変化が終わる1サイクルを判定するものです。
cmoveJudge が、シェルターが開ききったときに戻ってくる機構のためのものです。開ききるとtrueになって、シェルターが閉じ始めます。
変数名は適当ですね。
色の値に三項演算子を使っているので、コードは読みにくくなりましたねえ。
#include "ofApp.h" #define rep(i,j,k) for(int i=j;i<k;i++) bool f=false,cmoveJudge=false; float cmove=0; void ofApp::setup(){ ofNoFill(); ofSetBackgroundColor(0); ofSetColor(255); } void ofApp::update(){ } void ofApp::draw(){ rep(i,0,25){ //マウスが押されていない時 if(!f){ ofSetColor(80+i*7,0,100+i*6); ofDrawRectangle(i*10, i*10, ofGetWidth()-10*i*2, ofGetWidth()-10*i*2); //マウスが押されて、変化している時 }else { //色の設定に三項演算子。255越えたら255引きます ofSetColor((cmove+80+i*7)>255?(cmove+80+i*7-255):(cmove+80+i*7),0,(cmove+100+i*6>255)?(cmove+100+i*6-255):(cmove+100+i*6)); ofDrawRectangle(i*10, i*10, ofGetWidth()-10*i*2, ofGetWidth()-10*i*2); if(!cmoveJudge)cmove+=0.2; else cmove-=0.2; if(cmove>255){ cmoveJudge=true; } if(cmoveJudge && cmove<0){ f=false; cmoveJudge=false; } } } } void ofApp::mousePressed(int x, int y, int button){ if(button==0){ if(!f)f=true; } }