2017-09-16 4 views
1

Je fais du jeu en utilisant le langage Kotlin + la librairie LibGDX.Quelle est la différence entre get et [] call in Kotlin?

Version Kotlin: 1.1.2-4

Version LibGDX: 1.9.6

Comme documentation officielle dit

"[] operation stands for calls to member functions get() and set()." 

Mais, quand je tente d'exécuter cette ligne de code:

body.userData = animations[state[e].currentState]!!.keyFrames[frame]

Je reçois cette erreur:

Exception in thread "LWJGL Application" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lcom.badlogic.gdx.graphics.g2d.TextureRegion;

Cependant quand je change [] pour obtenir():

body.userData = animations[state[e].currentState]!!.keyFrames.get(frame)

Tout devient ok. PS: "frame" est un angle, converti en Int.

UPD: Je changé mon code peu

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 » est l'entité refrence de Ashley. "Body", "anim" et "state" sont des mappeurs de composants Ashley. Pour ceux qui ne savent pas ce que LibGDX est ici est la classe d'animation keyFrames ici est juste un tableau Java.

UPD 2: j'ai remarqué ce problème se produit uniquement lorsque j'utilise ce constructeur:

Animation(float frameDuration, Array<? extends T> keyFrames) 

Ressemble problème interopérable.

+0

Quel est le type de 'keyFrames'? –

+0

quelle version de LibGDX utilisez-vous? – Aryan

+0

@AbhishekAryan 1.9.6 – icarumbas

Répondre

0

erreur coulée objet ne peut pas être jeté à TextureRegion

public operator fun get(index: Int): T 

Renvoie l'élément de tableau à l'index spécifié de kotlin.Array. Est un tableau de type T dans la classe Animation. J'ai déclaré de cette manière, je n'ai pas d'erreur/exception de coulée. :

lateinit var ani:Animation<TextureRegion> 
ani = Animation(.1f,TextureRegion(Texture("badlogic.jpg"))) 
val y= ani.keyFrames.get(0) // -> y is a TextureRegion 

avec l'opérateur Remplacée indexation

val x=ani.keyFrames[0]  // -> x is a TextureRegion 

puis attribuez-lui au corps 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?) 
+0

Je ne comprends pas vraiment ce que vous voulez dire. J'ai même une exception dans cette ligne "val texture = animations [état [e] .currentState] !!. KeyFrames [frame]". Je ne pense pas que je jette quelque chose ici. – icarumbas

+0

qu'est-ce que les animations? Est-ce des tableaux d'animation? et 'state [e] .currentState'? – Aryan

+0

animations est HashMap >() – icarumbas