クラスの使用

提供:kuhalaboWiki
(版間での差分)
移動: 案内, 検索
(ページの作成:「 *Ballクラスを作成 ** Ball.h Ballクラスの宣言。変数とメソッド(関数) ** Ball.cpp コンストラクターBall()とメソッドの定義 ;B...」)
 
 
(1人の利用者による、間の3版が非表示)
3行: 3行:
 
** Ball.h Ballクラスの宣言。変数とメソッド(関数)
 
** Ball.h Ballクラスの宣言。変数とメソッド(関数)
 
** Ball.cpp コンストラクターBall()とメソッドの定義
 
** Ball.cpp コンストラクターBall()とメソッドの定義
 +
 +
# 新しくクラスを作るには、'''「プロジェクト > 新しい項目の追加...」''' を開き,'''「C++ファイル」'''と'''「ヘッダーファイル」'''を作る。
 +
#* 名前を それぞれ'''Ball.cpp''','''Ball.h'''とし、場所はともに '''..\src''' とする
 +
#* (注)「クラスの追加」や「クラスウィザード」は使えない。
 +
# ソリューションエクスプローラー上の'''src'''の中に'''Ball.cpp''' と '''Ball.h''' が新規作成される。
 +
  
 
;Ball.h
 
;Ball.h
131行: 137行:
 
void ofApp::mouseReleased(int x, int y, int button){
 
void ofApp::mouseReleased(int x, int y, int button){
 
mouse_pressed = false;
 
mouse_pressed = false;
 +
}
 +
</pre>
 +
 +
== クラスに配列を使用 ==
 +
;クラスに配列を使用して、複数のボールを作成
 +
;ofApp.h
 +
<pre>
 +
#pragma once
 +
 +
#include "ofMain.h"
 +
#include "Ball.h"
 +
 +
class ofApp : public ofBaseApp{
 +
public:
 +
static const int NUM = 10; //配列の大きさを指定
 +
bool mouse_pressed;
 +
 +
public:
 +
void setup();
 +
void update();
 +
void draw();
 +
 +
void keyPressed(int key);
 +
void keyReleased(int key);
 +
void mouseMoved(int x, int y );
 +
void mouseDragged(int x, int y, int button);
 +
void mousePressed(int x, int y, int button);
 +
void mouseReleased(int x, int y, int button);
 +
void windowResized(int w, int h);
 +
void dragEvent(ofDragInfo dragInfo);
 +
void gotMessage(ofMessage msg);
 +
 +
Ball balls[NUM]; //Ballクラスのインスタンスを配列で指定
 +
};
 +
</pre>
 +
 +
;ofApp.cppのupdate()とdraw()
 +
<pre>
 +
//--------------------------------------------------------------
 +
void ofApp::update(){
 +
 +
for(int i = 0; i < NUM; i++){
 +
if(mouse_pressed ){
 +
balls[i].vel.x = ( mouseX - balls[i].pos.x ) * 0.01;
 +
balls[i].vel.y = ( mouseY - balls[i].pos.y ) * 0.01;
 +
}
 +
balls[i].update();
 +
}
 +
}
 +
 +
//--------------------------------------------------------------
 +
void ofApp::draw(){
 +
 +
//全画面を半透明の黒でフェード
 +
ofSetColor(0, 0, 0, 10);
 +
ofRect(0, 0, ofGetWidth(), ofGetHeight());
 +
 +
for(int i = 0; i < NUM; i++){
 +
balls[i].draw();
 +
}
 
}
 
}
 
</pre>
 
</pre>
  
 
== 参考 ==
 
== 参考 ==
[[生命情報アート論]]
+
[[ジェネラティブアート論]]
  
  
 
[[Category:授業]]
 
[[Category:授業]]

2015年11月10日 (火) 05:33時点における最新版

  • Ballクラスを作成
    • Ball.h Ballクラスの宣言。変数とメソッド(関数)
    • Ball.cpp コンストラクターBall()とメソッドの定義
  1. 新しくクラスを作るには、「プロジェクト > 新しい項目の追加...」 を開き,「C++ファイル」「ヘッダーファイル」を作る。
    • 名前を それぞれBall.cppBall.hとし、場所はともに ..\src とする
    • (注)「クラスの追加」や「クラスウィザード」は使えない。
  2. ソリューションエクスプローラー上のsrcの中にBall.cppBall.h が新規作成される。


Ball.h
#pragma once
#include "ofMain.h"

class Ball {
public:
	ofPoint pos;
	ofPoint vel;
	ofPoint acc;
	float radius;
	ofColor bcolor;
public:
	Ball();
	void draw();
	void update();
};
Ball.cpp
#include "Ball.h"

Ball::Ball(){
	pos = ofPoint(ofGetWidth()/2, ofGetHeight()/2);
	vel = ofPoint(ofRandom(-5,5),ofRandom(-3,3));
	acc = ofPoint(ofRandom(-0.5,0.5),ofRandom(-0.3,0.3));
	radius = ofRandom(35,50);
	bcolor = ofColor(ofRandom(200,255), ofRandom(0,255), ofRandom(0,255), 100);
}

void Ball::update(){
	acc = ofPoint(ofRandom(-0.5,0.5),ofRandom(-0.3,0.3));
	vel.x += acc.x;
	vel.y += acc.y;
	pos.x += vel.x;
	pos.y += vel.y;

	if( pos.x > ofGetWidth() || pos.x < 0 ){
		vel.x *= -1;
	}
	if( pos.y > ofGetHeight() || pos.y < 0 ){
		vel.y *= -1;
	}
}

void Ball::draw(){
	ofSetColor(bcolor);
	ofCircle(pos.x, pos.y, radius);
}
ofApp.h
#pragma once

#include "ofMain.h"
#include "Ball.h"

class ofApp : public ofBaseApp{
public:
	bool mouse_pressed;
	
public:
	void setup();
	void update();
	void draw();

	void keyPressed(int key);
	void keyReleased(int key);
	void mouseMoved(int x, int y );
	void mouseDragged(int x, int y, int button);
	void mousePressed(int x, int y, int button);
	void mouseReleased(int x, int y, int button);
	void windowResized(int w, int h);
	void dragEvent(ofDragInfo dragInfo);
	void gotMessage(ofMessage msg);
		
	Ball myball;
};
ofApp.cpp
#include "ofApp.h"

//--------------------------------------------------------------
void ofApp::setup(){

	ofBackground(0, 0, 0); //背景色の設定
	ofSetColor(255, 255, 0); //描画色の設定
	ofSetBackgroundAuto(false);
	ofSetFrameRate(30);
	ofEnableAlphaBlending();  //アルファチャンネルを有効にする
	ofSetCircleResolution(64);

	mouse_pressed = false;
}

//--------------------------------------------------------------
void ofApp::update(){

	if(mouse_pressed ){
		myball.vel.x = ( mouseX - myball.pos.x ) * 0.01;
		myball.vel.y = ( mouseY - myball.pos.y ) * 0.01;
	}
	myball.update();
}

//--------------------------------------------------------------
void ofApp::draw(){

	//全画面を半透明の黒でフェード
	ofSetColor(0, 0, 0, 10);
	ofRect(0, 0, ofGetWidth(), ofGetHeight());

	myball.draw();
}

//--------------------------------------------------------------
void ofApp::mousePressed(int x, int y, int button){
	mouse_pressed = true;
}

//--------------------------------------------------------------
void ofApp::mouseReleased(int x, int y, int button){
	mouse_pressed = false;
}

[編集] クラスに配列を使用

クラスに配列を使用して、複数のボールを作成
ofApp.h
#pragma once

#include "ofMain.h"
#include "Ball.h"

class ofApp : public ofBaseApp{
public:
	static const int NUM = 10; //配列の大きさを指定
	bool mouse_pressed;
	
public:
	void setup();
	void update();
	void draw();

	void keyPressed(int key);
	void keyReleased(int key);
	void mouseMoved(int x, int y );
	void mouseDragged(int x, int y, int button);
	void mousePressed(int x, int y, int button);
	void mouseReleased(int x, int y, int button);
	void windowResized(int w, int h);
	void dragEvent(ofDragInfo dragInfo);
	void gotMessage(ofMessage msg);
		
	Ball balls[NUM]; //Ballクラスのインスタンスを配列で指定
};
ofApp.cppのupdate()とdraw()
//--------------------------------------------------------------
void ofApp::update(){

	for(int i = 0; i < NUM; i++){
		if(mouse_pressed ){
			balls[i].vel.x = ( mouseX - balls[i].pos.x ) * 0.01;
			balls[i].vel.y = ( mouseY - balls[i].pos.y ) * 0.01;
		}
		balls[i].update();
	}
}

//--------------------------------------------------------------
void ofApp::draw(){

	//全画面を半透明の黒でフェード
	ofSetColor(0, 0, 0, 10);
	ofRect(0, 0, ofGetWidth(), ofGetHeight());

	for(int i = 0; i < NUM; i++){
		balls[i].draw();
	}
}

[編集] 参考

ジェネラティブアート論

個人用ツール
名前空間

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