1

有没有一种方法可以使用 libcinder 进行绘制,而无需将所有代码放在主类的 draw() 方法上。我正在开发一个大型应用程序,将所有内容塞入一个文件中无论如何都不方便。

这是这个想法的一个例子:

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,updatedraw方法中调用方法。
  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 不兼容。在我的一个示例中可以找到一个非常基本的场景图:https ://github.com/paulhoux/Cinder-Samples/tree/master/SimpleSceneGraph

-保罗

于 2013-05-06T16:01:30.440 回答