Pepper 取消 运行 动画
Pepper cancel running animation
目前正在开发 Pepper 机器人(Android 开发者),我正在尝试使用一些 "basic" 动画(来自 QiSQK 库)。
例如,当调用 WS 时,我使用 animation/animate 启动 "think" 动画。然后,当 WS 调用结束时,我尝试使用另一个动画 ("showing the tablet")。
我看到如果上一个动画不是 finished/cancelled,Pepper 就不能再制作两次动画。
所以,我使用了 requestCancellation()
,但它并没有停止动画。
我也用了cancel(mayInterruptIfRunning)
,也没停
所以,我不能在不等待前一个动画停止的情况下链接 2 个动画(我的 WS 调用 = 最多 3-4 秒)。
有什么想法吗?
示例:
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()
}
}
}
谢谢,
巴斯蒂安
终于找到我的问题了。
实际上,我在创建这样的对象时存储了 animate
引用:
animate = AnimateBuilder
.with(qiContext)
.withAnimation(futureAnimation?.value)
.buildAsync()
所以,我打印了我的对象(就像我的回调中使用的每个 Future
),然后我发现在使用我的动画 andThenConsume
回调中的 it.async().run()
之后,returns 运行 动画参考,与我之前创建的不同(正在考虑重用相同的旧参考)。
所以,这里是我的新(工作)代码:
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>
}
}
}
目前正在开发 Pepper 机器人(Android 开发者),我正在尝试使用一些 "basic" 动画(来自 QiSQK 库)。 例如,当调用 WS 时,我使用 animation/animate 启动 "think" 动画。然后,当 WS 调用结束时,我尝试使用另一个动画 ("showing the tablet")。
我看到如果上一个动画不是 finished/cancelled,Pepper 就不能再制作两次动画。
所以,我使用了 requestCancellation()
,但它并没有停止动画。
我也用了cancel(mayInterruptIfRunning)
,也没停
所以,我不能在不等待前一个动画停止的情况下链接 2 个动画(我的 WS 调用 = 最多 3-4 秒)。
有什么想法吗?
示例:
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()
}
}
}
谢谢, 巴斯蒂安
终于找到我的问题了。
实际上,我在创建这样的对象时存储了 animate
引用:
animate = AnimateBuilder
.with(qiContext)
.withAnimation(futureAnimation?.value)
.buildAsync()
所以,我打印了我的对象(就像我的回调中使用的每个 Future
),然后我发现在使用我的动画 andThenConsume
回调中的 it.async().run()
之后,returns 运行 动画参考,与我之前创建的不同(正在考虑重用相同的旧参考)。
所以,这里是我的新(工作)代码:
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>
}
}
}