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);
}
}