gpt4 book ai didi

android - Pepper取消运行动画

转载 作者:行者123 更新时间:2023-11-29 18:44:06 24 4
gpt4 key购买 nike

目前正在开发 Pepper 机器人(Android 开发者),我正在尝试使用一些“基本”动画(来自 QiSQK 库)。例如,在调用 WS 时,我正在使用 animation/animate 开始“思考”动画。然后,当 WS 调用结束时,我尝试使用另一个动画(“显示平板电脑”)。

我看到,如果前一个动画没有完成/取消,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),然后我发现在使用 it.async().run() 之后来 self 的动画 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>
}
}
}

关于android - Pepper取消运行动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com