我有以下(伪)代码
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");
}
});
it work的行打印好了,所以我假设我正在更新动画,但标签永远不会添加到场景中!
如果我取消注释root.add(l)
Runnable
内的anim.delay(1500).then().add(root.layer, l.layer);
按预期工作(标签会在1秒后添加),但不会添加{{1}}
任何想法,我做错了吗?
答案 0 :(得分:1)
您不能只是将TPUI Widget
的图层添加到另一个图层,并期望Widget
正确呈现。必须通过Group.add
将小部件添加到其父级。
您正在使用的动画代码更适用于动画原始PlayN图层而不是UI元素。 UI元素通常使用LayoutManager
进行布局,Root
控制图层的位置。如果你试图直接为图层设置动画,你会混淆布局管理器,并且通常会弄乱一切。
也就是说,为界面的Animator.add
设置动画是非常安全的,因为它将整个UI锚定到PlayN场景图中。
如果您真的想尝试上面所做的事情,请不要使用action(new Runnable() {
root.add(l);
});
使用:
Label
(如上所述)正确地将Root
添加到Label
,并触发{{1}}的验证和呈现。