我想使用协程在我的代码中实现一个“跳转”。我的意思是想象一个笛卡尔平面,其中X是水平坐标,Y是垂直坐标,从点x=0和y=0开始,通过协程(到没有阻塞的主线),我想得到:
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我需要这样做,以便每次更新新值。我从这样一个想法开始:
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
}
}有没有更好的方法来找到解决方案(也许没有协程)
发布于 2020-06-25 20:06:40
好了,我设法解决了这个问题。正如我所说的,我想使用协程来表示2D游戏中的跳转,因为这样做可以避免阻塞线程,让游戏顺利运行。对于我来说,使用repeat函数和如下所示的协程就足够了:
我在build.gradle中实现了协程:
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.7"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.6"跳转解决方案:
// 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
}
}
}https://stackoverflow.com/questions/62562232
复制相似问题