目前,我是在Pepper机器人(Android开发)上开发的,我试图使用一些“基本”动画(来自QiSQK lib)。 例如,当调用WS时,我正在使用动画/动画开始“思考”动画。然后,当WS通话结束时,我尝试使用另一个动画(“显示平板电脑”)。
我看到,如果先前的动画没有完成/取消,Pepper无法进行两次动画处理。
因此,我使用了requestCancellation()
,但是它并没有停止动画。
我还使用了cancel(mayInterruptIfRunning)
,也没有停止。
因此,我不能不等待上一个动画停止就链接2个动画(我的WS调用= 3-4s max)。
有什么想法吗?
示例:
private var animate: Future<Animate>? = null
fun animate(animRes: Int) {
animate?.requestCancellation()
AnimationBuilder
.with(qiContext)
.withResources(animRes)
.buildAsync()
.thenConsume { futureAnimation ->
animate = AnimateBuilder
.with(qiContext)
.withAnimation(futureAnimation?.value)
.buildAsync()
animate?.andThenConsume {
it.async().run()
}
}
}
Thx, 巴斯蒂安。
答案 0 :(得分:2)
最后发现了我的问题。
实际上,在创建这样的对象时,我正在存储animate
引用:
animate = AnimateBuilder
.with(qiContext)
.withAnimation(futureAnimation?.value)
.buildAsync()
因此,我打印了对象(就像回调中使用的每个Future
一样),然后发现在动画it.async().run()
回调中使用andThenConsume
后,返回运行动画参考,与我之前创建的动画参考不同(正在考虑重用相同的旧参考)。
因此,这里是我的新(工作)代码:
fun animate(animRes: Int) {
//Cancelling possible running animation to display a new one
animate?.requestCancellation()
AnimationBuilder
.with(qiContext)
.withResources(animRes)
.buildAsync()
.thenConsume { futureAnimation ->
AnimateBuilder
.with(qiContext)
.withAnimation(futureAnimation?.value)
.buildAsync()
.andThenConsume {
animate = it.async().run() as Future<Animate>
}
}
}