有没有一种方法可以使用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);
}
答案 0 :(得分:2)
是的,有办法。实际上有几种方法。
void setup()
,void update()
和void draw()
。然后,您可以在主应用程序中创建此类的实例,将它们存储在成员变量或std::vector
中。然后,只需分别从主应用程序的setup
,update
和draw
方法调用方法。update
和draw
个事件。请参阅ListenerBasic示例:https://github.com/cinder/Cinder/tree/master/samples/ListenerBasic。有关所有可用事件的列表,请参阅:https://github.com/cinder/Cinder/blob/master/include/cinder/app/Window.h。draw()
方法,可以将对象放在其他对象之上,可以检测光标下的对象等。众所周知的场景图是http://www.openscenegraph.org/ ,但它与Cinder不兼容。我可以在我的一个样本中找到一个非常基本的场景图:https://github.com/paulhoux/Cinder-Samples/tree/master/SimpleSceneGraph -Paul