bars
いくつかの色付きのボックス オブジェクトを含むベクターがあります。各ボックス オブジェクトには、独自の描画および更新機能があります。各ボックスは、画面の一方の端から次の端に移動します。画面の外にある場合は、ボックスを削除する必要があります。イテレータを使用してボックスを移動し、画面の外にあるときを判断しています。
私は c++ に非常に慣れていないため、コードを機能させるのに問題があります。ベクトルからオブジェクトを消去する関数がエラーを出していますReference to non static member function must be called
。静的メンバーと非静的メンバーについて調べていますが、まだ少し迷っています。
これは、関連するコードを含むメインのヘッダー ファイルです。
class game : public ofxiPhoneApp {
public:
void setup();
void update();
void draw();
void exit();
vector <Colorbar> bars;
bool checkBounds (Colorbar &b);
};
私の game.mm ファイルでは、ベクターを作成し、それを繰り返し処理して、色付きのバー オブジェクトのプロパティを設定します。
void game::setup(){
bars.assign(5, Colorbar());
for (int i = 0; i<bars.size(); i++) {
ofColor color = colors.giveColor();
bars[i].setup();
bars[i].setColor(color.r,color.g,color.b);
bars[i].setWidth(50);
bars[i].setPos(ofGetScreenHeight()-(i*50), 0);
}
}
バーを画面上で移動する更新機能。
void game::update(){
for(vector<Colorbar>::iterator b = bars.begin(); b != bars.end(); b++){
(*b).update();
}
//this is the part that gives the error
bars.erase((remove_if(bars.begin(), bars.end(), checkBounds),bars.end()));
}
ボックスが範囲外かどうかを確認する関数は次のとおりです
bool game::checkBounds (Colorbar &b){
if (b.pos.x > ofGetScreenHeight()+50) {
// do stuff with bars vector here like adding a new object
return true;
} else {
return false;
}
}
私はいくつかの実験を行いましたbool checkBounds (Colorbar &b);
.ヘッダーファイルから削除して非静的にすることで、コードが機能します。bars
しかし問題は、古いオブジェクトが削除されたときに新しいオブジェクトを追加するために、その関数のベクトルにアクセスできるようにしたいということです。そして、それはもううまくいきません。
どうすればこれを解決できますか?