class testApp
├─ instance(object) insect <- class Insect//testApp.h の class testApp の定義の前方(上の行)
class Insect{
public:
float posX; // 自分自身の位置 x
float posY; // 自分自身の位置 x
std::string name; // 自分自身の名前(あるいは文字情報)
ofImage *img; // 外部でロードしたイメージデータへの参照
ofTrueTypeFont *font; // 外部でロードしたフォントデータへの参照
void draw(){;} // 描画関数、現時点では何もしない{;}
void update(){;} // 状態を更新する関数、現時点では何もしない{;}};
class testApp : public ofSimpleApp{
public:
void setup();
:
:
:
ofImage img;
ofTrueTypeFont font;Insect insect; // ここでクラス(雛形)からインスタンス(オブジェクト)を作ります。
};
//------------------------------
//testApp.cppvoid testApp::setup (){
img.loadImage("release-development.png"); //ロードするファイル名を指定 dataフォルダの中にあるファイルを指定する。
font.loadFont("verdana.tif",9); //ロードするフォントのファイル名を指定 dataフォルダの中にあるファイルを指定する。
:
:
//insectを(外部から)初期化している
insect.poseX=0;
insect.poseX=0;
insect.name=0;
insect.img=&img; // 参照の連結
insect.font=&font; // 参照の連結}
void testApp::draw(){
:
:
:
//インスタンス(オブジェクト)を使う:すべて外部からのアクセスによって使う
insect.font->drawString(insect.name, insect.poseX, insect.poseY);
//insect . font->drawString(insect . name, insect . poseX, insect . poseY);
//インスタンス(オブジェクト)insectの(.ドット)メンバーfontが参照する(->矢印)関数drawStringへの引数として()内へ、
//インスタンス(オブジェクト)insectの(.ドット)メンバーnameと、
//インスタンス(オブジェクト)insectの(.ドット)メンバーposXと、
//インスタンス(オブジェクト)insectの(.ドット)メンバーposYを与える。//上記はわかりづらく間違えやすい。
// insect.draw(mouseX,mouseY); //として機能するように改造する。}
コンストラクタ、デストラクタ
![]()
コンストラクタ: クラス名と同じ名前の関数です。クラスがインスタンス化(オブジェクト化)される時に実行されます。
class Insect{
public:
Insect(){
//初期の数値を与えておく
posXposY=0.0;
name="Protect Me From what I Want";}
~Insect(){;;}
float posX; // 自分自身の位置 x
float posY; // 自分自身の位置 x
std::string name; // 自分自身の名前(あるいは文字情報)
ofImage *img; // 外部でロードしたイメージデータへの参照
ofTrueTypeFont *font; // 外部でロードしたフォントデータへの参照
void draw(){;} // 描画関数、現時点では何もしない{;}
void update(){;} // 状態を更新する関数、現時点では何もしない{;}};
デストラクタ: クラス名先頭に~を付けた名前の関数です。インスタンス化(オブジェクト化)された後に、インスタンス(オブジェクト)が破棄される時に実行されます。
c++ 別のファイルに記述してincludeするの種類
![]()
.h ヘッダファイル (.hxx なども同様)
クラスの定義を書く。.cpp 実装ファイル (.cc , .cxx なども同様)
関数を実装する。
Insect::draw{
//ここに機能を記述
}
std ( Standard Template Library )
![]()
本家 / Standard Template Library プログラミング 日本語 (絶版書籍のweb公開版)
std::vector: 可変配列の使い方
std::vector<Insect> insectArray;
std::vector<配列に格納する型・クラス名> 配列の名前;
配列の後ろに要素を追加:
//5要素追加。
Insect inserct;
insectArray.push_back( inserct );
insectArray.push_back( inserct );
insectArray.push_back( inserct );
insectArray.push_back( inserct );
insectArray.push_back( inserct );
//ブラケットのアクセス
for ( int i=0; i<insectArray.size(); i++)
{std::cout << insectArray[ i ].name << std::endl;
}
//イテレータでのアクセス
std::vector<Insect>::iterator itr;
for(itr=insectArray.begin(); itr!= insectArray.end(); itr++)
{std::cout <<itr->name << std::endl;
}
ofSoundPlayer
![]()
http://www.openframeworks.cc/documentation#ofSoundPlayer-about
//testApp.h ファイル--------------
ofSoundPlayer mySnd;
//testApp.cpp ファイル------------
// void testApp::setup()
{mySnd.loadSound("データフォルダの中のサウンドファイル名");
}
sndObj
![]()
こちらユニバーサルバイナリのライブラリです。SndObjlib.zip フォルダをこのように配置してください。
pre release v0.05 x-code FAT
├─ apps
├─ blablib
│ ├ SndObjLib
│ ├
├─ libs
└─ otherhttp://music.nuim.ie//musictec/SndObj/main.html
http://music.nuim.ie//musictec/man/SndObj/examples.html
/////////////////////testApp.h///////////////////////
class testApp : public ofSimpleApp{
public:
void setup();
void update();
void draw();HarmTable *table1;//(1024,1,SINE);
HarmTable *table2;
Oscilt *mod;//(&table1, 2.5f, 10000.f);
Oscili *oscil;//(&table1, 440.f, 10000.f, 0, &mod);
Oscili *oscil2;
SndRTIO *output;//(1, SND_OUTPUT);
SndThread sndthread;};
///////////////////testApp.cpp///////////////////////
void testApp::setup(){
table1=new HarmTable(1024,1,BUZZ);
table2=new HarmTable(256,1,BUZZ);
mod=new Oscilt(table1, 2.5f, 10000.f);
oscil=new Oscili(table1, 45.f, 10000.f);//,0,mod);//, 0, mod);
oscil2=new Oscili(table2, 90.f, 10000.f);//, &blp);//, mod);
output=new SndRTIO(2, SND_OUTPUT);
output->SetOutput(1, oscil);
output->SetOutput(2, oscil2);
oscil->SetAmp(100);
oscil2->SetAmp(100);
// sound thread set-up
sndthread.AddObj(oscil);
sndthread.AddObj(oscil2);
sndthread.AddObj(output, SNDIO_OUT);
sndthread.ProcOn();}