0

我有以下(伪)代码

root = _iface.createRoot(...)

Label l = new Label("hello world");
anim = Animator.create();
anim.delay(1500).then().add(root.layer, l.layer);
anim.delay(1000).then().action(new Runnable() {
    public void run() {
        // root.add(l);
        System.out.println("it works");
    }
});

它的工作线打印正常,所以我假设我正在正确更新动画,但标签从未添加到场景中!

如果我取消注释root.add(l)内部,Runnable它会按预期工作(标签在 1 秒后添加),但不会添加anim.delay(1500).then().add(root.layer, l.layer);

知道为什么我做错了吗?

4

1 回答 1

1

您不能只是将 TPUI 的层添加Widget到另一个层并期望Widget正确渲染。必须通过 将小部件添加到其父级Group.add

您使用的动画代码更适合为原始 PlayN 层设置动画而不是 UI 元素。UI 元素通常使用LayoutManagerwhich 控制层的位置来布局。如果您尝试直接为图层设置动画,您会混淆布局管理器并且通常会搞砸一切。

也就是说,Root对界面进行动画处理是非常安全的,因为这会将整个 UI 锚定到 PlayN 场景图中。

如果您真的想尝试上面的操作,请不要Animator.add使用:

action(new Runnable() {
  root.add(l);
});

(就像你上面所说的那样)正确地将 , 添加LabelRoot, 并触发Label.

于 2012-02-09T18:59:52.490 回答