我一直在玩弄杂乱,并且对如何与演员和儿童演员合作变得有点困惑。让我们从一个简单的例子开始,这让我有些困惑。我创建两个Clutter :: Rectangles(我使用Cluttermm绑定)并使第二个成为第一个的孩子:
Glib::RefPtr<Clutter::Rectangle> rect = Clutter::Rectangle::create();
rect->set_color(Clutter::Color(255, 0, 0, 255));
rect->set_size(100, 100);
rect->set_position(500,500);
rect->show();
stage->add_actor(rect);
Glib::RefPtr<Clutter::Rectangle> rect2 = Clutter::Rectangle::create();
rect2->set_color(Clutter::Color(0, 255, 0, 255));
rect2->set_size(100, 100);
rect2->set_position(0,0);
rect2->set_parent(rect);
rect2->show();
从我的理解,这应该使两个矩形可见,但矩形2不是。尽管它是第一个矩形的父级,但它无处可寻。为什么是这样? set_parent()的真正含义是什么?
这种混乱更深入。今天早些时候,我试图写一个更复杂的复合演员,它由许多演员组成(例如矩形等)。虽然在视觉上,这项任务是成功的,但在尝试为这些儿童演员添加事件回调时遇到了严重的困难 - 事实上,据我所知,事件永远不会触及父演员的孩子。
这让我很困惑。例如,如何使用杂乱创建一个按钮框?您是否必须创建自己的actor检测/事件管理系统,或者是通过将子项添加到阶段而不是实际父项来将事件回调连接到子actor的唯一方法?
这让我很困惑,考虑到目前缺乏文献,任何帮助都会非常感激!
答案 0 :(得分:1)
Rectangle不是容器:您不能将子项添加到一个容器中;或者,至少,您可以将actor的父级设置为非容器actor,但不会绘制该actor - 这很可能不是您想要的。
您应该使用容器actor并将矩形添加到该容器中。
这对于Clutter≤1.8是有效的;在当前稳定版的Clutter(1.10)中,有各种变化:
ClutterActor的API参考应该可以解释这个问题: