我一直在玩弄混乱,对如何与演员和儿童演员合作感到困惑。让我们从一个简单的例子开始,这使我有些困惑。我创建两个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(例如矩形等)组成。从外观上看,此任务是成功的,但在尝试将事件回调附加到这些子演员时,我遇到了严重的困难-实际上,据我所知,事件永远不会到达父演员的孩子。
这让我很困惑。例如,如何使用混乱来创建按钮框?您是否必须创建自己的演员检测/事件管理系统,还是通过将孩子添加到舞台而不是实际的父母来将事件回调连接到孩子演员的唯一方法?
这让我非常困惑,考虑到当前缺乏文献资料,我们将不胜感激!
最佳答案
矩形不是容器:您不能将子代添加到其中;或者,至少,您可以将演员的父母设为非容器演员,但该演员不会被绘画-这很可能不是您想要的。
您应该使用容器actor并向该容器添加矩形。
但是,这对于杂波≤1.8有效。在当前的稳定版Clutter(1.10)中,进行了各种更改:
ClutterActor替换了大多数已弃用的API-即您应该创建Actor实例并为其添加子代。
ClutterActor可以容纳孩子,并且默认情况下它们将被绘制;
ClutterRectangle在Clutter 1.10中已被弃用,尽管它的行为尚未更改(向其中添加子代不会导致这些子代被绘制)。
clutter_actor_set_parent()在1.10中也已被弃用,转而使用类似于DOM的add_child()。
有关ClutterActor的API参考,应该可以使您对此问题有所了解:
http://developer.gnome.org/clutter/stable/ClutterActor.html