【问题标题】:Working with Children Actors in the Clutter API在 Clutter API 中使用儿童 Actor
【发布时间】:2012-05-29 18:33:48
【问题描述】:

我一直在玩弄杂乱无章的东西,对如何与演员和儿童演员一起工作有点困惑。让我们从一个让我有些困惑的简单示例开始。我创建了两个 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();

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

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

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

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

【问题讨论】:

  • rect2 和 rect 的大小相同,并且您已将子 rect2 移动到相对于父级的 pos (0,0) 位置,使其完全适合其父级矩形。那么它是如何可见的呢?
  • 我忘了改变那个位置...最初我想也许矩形是相对于父矩形移动的,结果发现它自己离开了屏幕。即使将位置设置为 (0,0),也看不到绿色矩形,只有红色父矩形可见。

标签: c++ api clutter


【解决方案1】:

一个 Rectangle 不是一个容器:你不能给一个容器添加子元素;或者,至少,您可以将actor的父级设置为非容器actor,但不会绘制该actor - 这很可能不是你想要的。

你应该使用一个容器actor并向那个容器添加矩形。

不过,这对 Clutter ≤ 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

【讨论】:

  • 我没有意识到 cluttermm 跟不上图书馆的其余部分。非常感谢你提供的信息。我想剩下的问题是我是否应该继续使用我更熟悉的更过时的 cluttermm 绑定,或者我是否应该花时间学习新版本并编写我自己的更简单的绑定以方便我的其余 C++ 代码?
  • 花时间更新 C++ 绑定可能会更好——它们大多是自动生成的,所以这是从当前稳定版本更新 API 描述的情况。我敢肯定 cluttermm 维护者不会介意补丁。 :-)
猜你喜欢
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 1970-01-01
相关资源
最近更新 更多