1つのボールがふらふら動く
提供:kuhalaboWiki
(版間での差分)
(1人の利用者による、間の4版が非表示) | |||
1行: | 1行: | ||
+ | ;ボールが1つの場合 | ||
+ | |||
<pre> | <pre> | ||
#include "ofApp.h" | #include "ofApp.h" | ||
67行: | 69行: | ||
} | } | ||
</pre> | </pre> | ||
+ | |||
+ | ;ボールが複数の場合(配列の利用) | ||
+ | |||
+ | <pre> | ||
+ | #include "ofApp.h" | ||
+ | #define NUM 100 //円の数を表す定数NUMを1000と定義 | ||
+ | |||
+ | float loc_x[NUM]; | ||
+ | float loc_y[NUM]; | ||
+ | |||
+ | float speed_x[NUM]; | ||
+ | float speed_y[NUM]; | ||
+ | float acc_x[NUM]; | ||
+ | float acc_y[NUM]; | ||
+ | |||
+ | |||
+ | //-------------------------------------------------------------- | ||
+ | void ofApp::setup(){ | ||
+ | |||
+ | ofBackground(0, 0, 0); //背景色の設定 | ||
+ | ofSetColor(255, 255, 0); //描画色の設定 | ||
+ | ofSetCircleResolution(64);//円の解像度 | ||
+ | ofEnableAlphaBlending(); //アルファチャンネルを有効にする | ||
+ | ofSetBackgroundAuto(false); //背景色での塗りつぶしなし | ||
+ | ofSetFrameRate(30); //フレームレイト設定 | ||
+ | |||
+ | for( int i = 0; i < NUM; i++){ | ||
+ | |||
+ | loc_x[i] = 500; | ||
+ | loc_y[i] = 500; | ||
+ | speed_x[i] = 3; | ||
+ | speed_y[i] = 2; | ||
+ | |||
+ | acc_x[i] = 0; | ||
+ | acc_y[i] = 0; | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | //-------------------------------------------------------------- | ||
+ | void ofApp::update(){ | ||
+ | |||
+ | for( int i = 0; i < NUM; i++){ | ||
+ | acc_x[i] = ofRandom(-0.5,0.5); | ||
+ | acc_y[i] = ofRandom(-0.5,0.5); | ||
+ | |||
+ | speed_x[i] = speed_x[i] + acc_x[i]; | ||
+ | speed_y[i] = speed_y[i] + acc_y[i]; | ||
+ | |||
+ | if( loc_x[i] > ofGetWidth() ){ | ||
+ | speed_x[i] = speed_x[i] * -1; | ||
+ | } | ||
+ | if( loc_x[i] < 0 ){ | ||
+ | speed_x[i] = speed_x[i] * -1; | ||
+ | } | ||
+ | |||
+ | if( loc_y[i] > ofGetHeight() ){ | ||
+ | speed_y[i] = speed_y[i] * -1; | ||
+ | } | ||
+ | if( loc_y[i] < 0 ){ | ||
+ | speed_y[i] = speed_y[i] * -1; | ||
+ | } | ||
+ | |||
+ | loc_x[i] = loc_x[i] + speed_x[i]; | ||
+ | loc_y[i] = loc_y[i] + speed_y[i]; | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | //-------------------------------------------------------------- | ||
+ | void ofApp::draw(){ | ||
+ | |||
+ | //全画面を半透明の黒でフェード | ||
+ | ofSetColor(0, 0, 0, 100); | ||
+ | ofRect(0, 0, ofGetWidth(), ofGetHeight()); | ||
+ | |||
+ | for( int i = 0; i < NUM; i++){ | ||
+ | ofSetColor(31, 63, 255); | ||
+ | ofCircle(loc_x[i],loc_y[i], 5); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | == 参考 == | ||
+ | [[ジェネラティブアート論]] | ||
[[Category:授業]] | [[Category:授業]] |
2015年10月27日 (火) 08:26時点における最新版
- ボールが1つの場合
#include "ofApp.h" float loc_x; float loc_y; float speed_x; float speed_y; float acc_x; float acc_y; //-------------------------------------------------------------- void ofApp::setup(){ ofBackground(0, 0, 0); //背景色の設定 ofSetColor(255, 255, 0); //描画色の設定 ofSetCircleResolution(64);//円の解像度 ofEnableAlphaBlending(); //アルファチャンネルを有効にする ofSetBackgroundAuto(false); //背景色での塗りつぶしなし ofSetFrameRate(30); //フレームレイト設定 loc_x = 500; loc_y = 500; speed_x = 7; speed_y = 4; acc_x = 0; acc_y = 0; } //-------------------------------------------------------------- void ofApp::update(){ acc_x = ofRandom(-0.8,0.8); acc_y = ofRandom(-0.8,0.8); speed_x = speed_x + acc_x; speed_y = speed_y + acc_y; if( loc_x > ofGetWidth() ){ speed_x = speed_x * -1; } if( loc_x < 0 ){ speed_x = speed_x * -1; } if( loc_y > ofGetHeight() ){ speed_y = speed_y * -1; } if( loc_y < 0 ){ speed_y = speed_y * -1; } loc_x = loc_x + speed_x; loc_y = loc_y + speed_y; } //-------------------------------------------------------------- void ofApp::draw(){ //全画面を半透明の黒でフェード ofSetColor(0, 0, 0, 10); ofRect(0, 0, ofGetWidth(), ofGetHeight()); ofSetColor(31, 63, 255); ofCircle(loc_x,loc_y, 40); }
- ボールが複数の場合(配列の利用)
#include "ofApp.h" #define NUM 100 //円の数を表す定数NUMを1000と定義 float loc_x[NUM]; float loc_y[NUM]; float speed_x[NUM]; float speed_y[NUM]; float acc_x[NUM]; float acc_y[NUM]; //-------------------------------------------------------------- void ofApp::setup(){ ofBackground(0, 0, 0); //背景色の設定 ofSetColor(255, 255, 0); //描画色の設定 ofSetCircleResolution(64);//円の解像度 ofEnableAlphaBlending(); //アルファチャンネルを有効にする ofSetBackgroundAuto(false); //背景色での塗りつぶしなし ofSetFrameRate(30); //フレームレイト設定 for( int i = 0; i < NUM; i++){ loc_x[i] = 500; loc_y[i] = 500; speed_x[i] = 3; speed_y[i] = 2; acc_x[i] = 0; acc_y[i] = 0; } } //-------------------------------------------------------------- void ofApp::update(){ for( int i = 0; i < NUM; i++){ acc_x[i] = ofRandom(-0.5,0.5); acc_y[i] = ofRandom(-0.5,0.5); speed_x[i] = speed_x[i] + acc_x[i]; speed_y[i] = speed_y[i] + acc_y[i]; if( loc_x[i] > ofGetWidth() ){ speed_x[i] = speed_x[i] * -1; } if( loc_x[i] < 0 ){ speed_x[i] = speed_x[i] * -1; } if( loc_y[i] > ofGetHeight() ){ speed_y[i] = speed_y[i] * -1; } if( loc_y[i] < 0 ){ speed_y[i] = speed_y[i] * -1; } loc_x[i] = loc_x[i] + speed_x[i]; loc_y[i] = loc_y[i] + speed_y[i]; } } //-------------------------------------------------------------- void ofApp::draw(){ //全画面を半透明の黒でフェード ofSetColor(0, 0, 0, 100); ofRect(0, 0, ofGetWidth(), ofGetHeight()); for( int i = 0; i < NUM; i++){ ofSetColor(31, 63, 255); ofCircle(loc_x[i],loc_y[i], 5); } }