【问题标题】:LibGDX Animation Java to KotlinLibGDX 动画 Java 到 Kotlin
【发布时间】:2021-01-26 16:09:58
【问题描述】:

我正在尝试使用精灵表将动画上的这个 LibGDX 示例从 Java 转换为 Kotlin

这里是 Java 代码 sn-p 的链接: https://github.com/libgdx/libgdx/wiki/2D-Animation

这是我的 Kotlin 代码:

 // load the sprite sheet as a texture
    idleSheet = Texture("raw/Skeleton-Idle.png".toInternalFile())
    idleFrames = Array<TextureRegion>(true, FRAME_ROWS*FRAME_COLS)

    // use split method to create 2d array of texture regions
    // sprite sheet contains frames of equal size & alignment
    var temp = TextureRegion.split(
        idleSheet,
        idleSheet.width / FRAME_COLS,
        idleSheet.height / FRAME_ROWS
    )

    var index = 1
    for (i in 1..FRAME_ROWS) {
        for (j in 1..FRAME_COLS) {
             idleFrames[index] = temp[i][j]
            index ++
        }
    }
    // initialise animation with frame interval & array of frames
    idleAnimation = Animation(0.05f,idleFrames)

问题似乎出在Index 1 out of bounds for length 1 行中的idleFrames[index] = temp[i][j] - 我在使用 Kotlin 数组时做了一些非常基本的错误,但似乎无法修复它。

有什么想法吗?

【问题讨论】:

  • 感谢您的快速回复 - 实际上我在遇到这里的路障后不久就搬到了 TextureAtlases。刚回来看看我能不能解决这个难题
  • 刚刚尝试了您的解决方案 - index can't be &gt;= size: 0 &gt;= 0 是新错误 - 指向同一行 idleFrames[index] = temp[i][j]
  • 哦,我刚刚意识到您使用的是 LibGDX 的 Array 类,而不是 Kotlin 的数组。

标签: arrays kotlin animation libgdx


【解决方案1】:
  1. .. 结束包容。直到结束独占

  2. 数组从索引 0 开始,而不是 1。例如,请使用 i in 0 until FRAME_ROWS

  3. libGDX Array 类的行为很像 List。您不能直接将值分配给尚未填充的索引。因此,不要使用idleFrames[index] = temp[i][j],而是使用idleFrames.add(temp[i][j]),您可以完全摆脱index 变量。

【讨论】:

  • 谢谢,记住这两种数组的区别!我现在回到 TextureAtlases
  • 解决此问题的一种方法是为 libGDX 数组创建一个类型别名,并将其命名为 GdxArray。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 2023-03-15
  • 2016-10-17
  • 2015-11-20
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多