1

すべてのコードをメインクラスのdraw()メソッドに配置せずに、libcinderを使用して描画できる方法はありますか?私は大きなアプリに取り組んでいますが、すべてを1つのファイルに詰め込むのは決して便利ではありません。

これは、アイデアの例です。

class MyApp : public AppBasic {
  public:
    void setup ();
    void update ();
    void draw ();
  private:
    vector<MyObject> myObjects;
};

MyApp::draw () {
  for (int i = 0; i < myObjects.size(); ++i) {
    myObjects[i].render ();
  }
}

CINDER_APP_BASIC (MyApp, RendererGL)

/* ------------------ */

class MyObject {

  public:
    void render ();

};

void MyObject::render () {
  Rectf rect (0, 0, 20, 20);
  gl::drawSolidRoundedRect(rect, 15.0);
}
4

1 に答える 1

2

はい、方法はあります。実際にはいくつかの方法があります。

  1. 少なくとも次のメソッドを含むクラスを作成します: void setup()void update()およびvoid draw()。次に、メイン アプリケーションで、このクラスのインスタンスを作成し、メンバー変数またはstd::vector. setup次に、メイン アプリケーションのupdateおよびメソッドからそれぞれメソッドを呼び出すだけdrawです。
  2. Cinder のイベント システムを使用してupdatedrawイベントに接続します。ListenerBasic サンプルを参照してください: https://github.com/cinder/Cinder/tree/master/samples/ListenerBasic。使用可能なすべてのイベントのリストについては、https ://github.com/cinder/Cinder/blob/master/include/cinder/app/Window.h を参照してください。
  3. すべてのオブジェクトの描画を処理するシーン グラフ システムを作成または使用します。オブジェクトの各メソッドを正しい順序で呼び出しdraw()、他のオブジェクトの上にオブジェクトを配置したり、カーソルの下にあるオブジェクトを検出したりできます。よく知られているシーン グラフはhttp://www.openscenegraph.org/です。 、ただし、Cinder とは互換性がありません。非常に基本的なシーン グラフは、私のサンプルの 1 つにあります: https://github.com/paulhoux/Cinder-Samples/tree/master/SimpleSceneGraph

-ポール

于 2013-05-06T16:01:30.440 に答える