1つのボールがふらふら動く

提供:kuhalaboWiki
移動: 案内, 検索
ボールが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);
	}
}

参考

ジェネラティブアート論

個人用ツール
名前空間

変種
操作
案内
ツールボックス