【问题标题】:LibGDX getKeyFrame said to return object instead of TextureRegion/frameLibGDX getKeyFrame 表示返回对象而不是 TextureRegion/frame
【发布时间】:2017-01-18 20:31:07
【问题描述】:

跟随本教程:https://www.youtube.com/watch?v=1fJrhgc0RRw

我收到“Gradle 错误:不兼容的类型:对象无法转换为 TextureRegion”

在这一行:

region = heroJump.getKeyFrame(stateTimer);

heroJump 被声明为:

private Animation heroJump;

并且在顶部导入为:

import com.badlogic.gdx.graphics.g2d.Animation;

在 Android Studio 中,当您键入 heroJump.getKeyFrame() 时弹出框显示 Object 是函数的返回类型。
在教程中,它显示了一个 TexturedFrame。
我正在导入它与教程相同。
我不确定为什么它没有将返回类型视为相同的东西。
即使当我单击 Animation 类查看其文档时,它似乎也提供了正确的返回类型。

什么没有正确完成,以便 AndroidStudio/Compiler 知道正确的返回类型并进行编译?

【问题讨论】:

  • Animation 类最近发生了变化,请参阅:badlogicgames.com/wordpress/?p=3980。如果您遵循教程,请确保使用用于创建教程的 libgdx 版本。
  • 最简单的答案是更改“私人动画 heroJump;”到“私有动画 heroJump;”

标签: java android libgdx


【解决方案1】:

该方法在 API 中声明为

public T getKeyFrame(float stateTime)

还有类定义public class Animation<T>

您有一个原始的 Animation 实例。进口不是问题。声明是。

例如,您需要private Animation<TextureRegion> heroJump;,然后将其提供给您的Array<TextureRegion>

【讨论】:

  • 这行得通。谢谢你。仍然不明白为什么教程在他们的声明中不需要它。也许它会随着时间而改变。
  • 考虑到视频中出现的自动完成确实显示数组参数需要是TextureRegion 集合,可能会发生变化
  • 该类在 1.9.5 LibGDX 版本中已更改,因此该教程可能已过时。
【解决方案2】:

您没有以编译器可以明确确定它们的方式定义泛型。 Animation 实际上是一个 Animation<T> ,其中 T 需要指定给编译器。 '修复'是在你的 heroJump 实例中定义 T ,所以如果它预期是一个 TextureRegion 那么它需要设置为:

private Animation<TextureRegion> heroJump; 

而不是您在代码块中列出的模棱两可的形式。

【讨论】:

  • 谢谢你,会标记为 anwser 但你被打败了几秒钟 :)
  • @ChrisValentine - 没问题:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 2018-12-18
  • 1970-01-01
  • 2012-09-28
  • 2021-09-18
  • 2021-07-05
相关资源
最近更新 更多