c++ - 在 Clutter API 中使用 child Actor

标签 c++ api clutter

我一直在玩弄困惑,对如何与 Actor 和 child Actor 合作感到有点困惑。让我们从一个简单的例子开始,这个例子让我有些困惑。我创建了两个 Clutter::Rectangles(我使用 Cluttermm 绑定(bind))并将第二个作为第一个的子对象:

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();

据我了解,这应该使两个矩形可见,但 rectangle2 不是。尽管将它设为第一个矩形的父级,但它无处可寻。为什么是这样? set_parent() 的真正含义是什么?

这种混淆有更深层次的含义。今天早些时候,我尝试编写一个更复杂的复合 Actor ,它由许多 Actor (例如矩形等)组成。虽然从视觉上看,这项任务是成功的,但我在尝试将事件回调附加到这些子 actor 时遇到了严重的困难——事实上,据我所知,事件永远不会到达父 actor 的子级。

这让我很困惑。例如,如何使用困惑创建一个按钮框?您是否必须创建自己的 actor 检测/事件管理系统,或者将事件回调连接到子 actor 的唯一方法是将子 actor 添加到舞台而不是实际的父 actor?

这让我很困惑,考虑到目前缺乏文献,任何帮助将不胜感激!

最佳答案

Rectangle 不是容器:您不能向其中添加 child ;或者,至少,您可以将 actor 的父级设置为非容器 actor,但不会绘制该 actor - 这很可能不是您想要的。

您应该使用容器 actor 并向该容器添加矩形。

不过,这对 Clutter ≤ 1.8 有效;在当前的 Clutter 稳定版 (1.10) 中发生了各种变化:

  • ClutterActor 取代了大部分已弃用的 API - 即您应该创建 Actor 实例并向它们添加子实例。
  • ClutterActor 可以容纳 child ,他们会被默认绘制;
  • ClutterRectangle 在 Clutter 1.10 中已被弃用,但其行为没有改变(向其添加子项不会导致这些子项被绘制)。
  • clutter_actor_set_parent() 在 1.10 中也已被弃用,取而代之的是更像 DOM 的 add_child()。

ClutterActor 的 API 引用应该阐明这个问题:

http://developer.gnome.org/clutter/stable/ClutterActor.html

关于c++ - 在 Clutter API 中使用 child Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10779964/

相关文章:

API模型定义

在 Web 应用程序中使用基于 C 的 API(困惑)的 Javascript 扩展

python - 我如何在 Xorg 中获取窗口的图标名称?

C++ : Generic Function for random Number generation

c++ - 如何避免模板类中typedef的重新定义?

c++ - while 循环需要显式条件,for 循环不需要,为什么?

c++ - 枚举计算机上的监视器

javascript - 何时以及如何仅在 promise 完成时返回 http 响应?

web-services - RESTful API : What METHOD/HEADER combo to use for validation-only

linux - 如何使用 clutter 直接渲染到 linux framebuffer?