我正在使用Kotlin语言+ LibGDX库进行游戏。
Kotlin版本:1.1.2-4
LibGDX版本:1.9.6
正如官方文件所说
"[] operation stands for calls to member functions get() and set()."
但是,当我尝试运行这行代码时:
body.userData = animations[state[e].currentState]!!.keyFrames[frame]
我收到此错误:
Exception in thread "LWJGL Application" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lcom.badlogic.gdx.graphics.g2d.TextureRegion;
然而,当我将[]更改为get()时:
body.userData = animations[state[e].currentState]!!.keyFrames.get(frame)
一切都好。
PS:“frame”是角度,转换为Int。
UPD: 我稍微改变了我的代码
val animation: Animation = anim[e].animations[state[e].currentState]!!
val tex = animation.keyFrames[frame] // Get exception on this line anyway
body[e].body.userData = tex
“e”是来自Ashley的实体参考。 “body”,“anim”和“state”是Ashley组件的映射器。
对于那些不知道LibGDX在这里的人是动画类 这里的keyFrame只是一个Java数组。
UPD 2: 我注意到只有当我使用这个构造函数时才会出现问题:
Animation(float frameDuration, Array<? extends T> keyFrames)
看起来像是可互操作的问题。
答案 0 :(得分:0)
投射错误对象无法转换为TextureRegion
public operator fun get(index: Int): T
返回指定索引kotlin.Array
的数组元素。
T[] keyFrames
是Animation
类中的类型为T的数组。
我以这种方式宣称,我没有投射错误/异常。 :
lateinit var ani:Animation<TextureRegion>
ani = Animation(.1f,TextureRegion(Texture("badlogic.jpg")))
val y= ani.keyFrames.get(0) // -> y is a TextureRegion
替换为索引运算符
val x=ani.keyFrames[0] // -> x is a TextureRegion
然后分配给body userData。
val world = World(Vector2(10f,10f),false)
val body = world.createBody(BodyDef())
body.userData = y // -> Either you use x or y you always get sprite
var sprite=Sprite(body.userData as TextureRegion?)