クラスの使用
提供:kuhalaboWiki
(版間での差分)
(ページの作成:「 *Ballクラスを作成 ** Ball.h Ballクラスの宣言。変数とメソッド(関数) ** Ball.cpp コンストラクターBall()とメソッドの定義 ;B...」) |
|||
| 133行: | 133行: | ||
} | } | ||
</pre> | </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> | ||
| + | |||
== 参考 == | == 参考 == | ||
2014年11月17日 (月) 03:07時点における版
- Ballクラスを作成
- Ball.h Ballクラスの宣言。変数とメソッド(関数)
- Ball.cpp コンストラクターBall()とメソッドの定義
- 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();
}
}