首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin协程-跳跃函数

Kotlin协程-跳跃函数
EN

Stack Overflow用户
提问于 2020-06-25 02:57:21
回答 1查看 71关注 0票数 0

我想使用协程在我的代码中实现一个“跳转”。我的意思是想象一个笛卡尔平面,其中X是水平坐标,Y是垂直坐标,从点x=0和y=0开始,通过协程(到没有阻塞的主线),我想得到:

代码语言:javascript
复制
y= 0
y=  1
y=   2
y=    3
y=     4
y=      5
y=       6
y=      5
y=     4
y=    3
y=   2
y=  1
y= 0

我需要这样做,以便每次更新新值。我从这样一个想法开始:

代码语言:javascript
复制
    fun jumpUp() {

    jumpPosition = 0

    repeat(5) {
        sleep(10)
        jumpPosition += 10
        coordinates[coordinates.x] = coordinates.y - jumpPosition
    }
    repeat(5) {
        sleep(30)
        coordinates[coordinates.x] = coordinates.y + jumpPosition
        jumpPosition -= 10
    }
}

有没有更好的方法来找到解决方案(也许没有协程)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-25 20:06:40

好了,我设法解决了这个问题。正如我所说的,我想使用协程来表示2D游戏中的跳转,因为这样做可以避免阻塞线程,让游戏顺利运行。对于我来说,使用repeat函数和如下所示的协程就足够了:

我在build.gradle中实现了协程:

代码语言:javascript
复制
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6"

跳转解决方案:

代码语言:javascript
复制
// Take a jump
fun jump() {
    jumpJob = coroutineScope.launch {
        repeat(6) {
            delay(GameParameters.instance.jumpMovementDuration.toLong() / 10)
            jumpPosition += GameParameters.instance.jumpHeight / 10
            coordinates[coordinates.x] = coordinates.y - jumpPosition
        }

        delay(GameParameters.instance.jumpStasisDuration.toLong())

        repeat(6) {
            delay(GameParameters.instance.jumpMovementDuration.toLong() / 10)
            coordinates[coordinates.x] = coordinates.y + jumpPosition
            jumpPosition -= GameParameters.instance.jumpHeight / 10
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62562232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档