繁体   English   中英

Java / LibGDX从用户数据获取精灵

[英]Java/LibGDX get sprite from userdata

我正在尝试从灯具用户数据访问一个精灵,它应该可以正常工作,但是却给我这个错误:

Exception in thread "LWJGL Application" java.lang.ClassCastException: java.lang.String cannot be cast to com.freeranger.colorcourse.entities.EvilE
at com.freeranger.colorcourse.handlers.MyContactListener.beginContact(MyContactListener.java:74)
at com.badlogic.gdx.physics.box2d.World.beginContact(World.java:985)
at com.badlogic.gdx.physics.box2d.World.jniStep(Native Method)
at com.badlogic.gdx.physics.box2d.World.step(World.java:689)
at com.freeranger.colorcourse.screens.Play.update(Play.java:185)
at com.freeranger.colorcourse.screens.Play.render(Play.java:202)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.freeranger.colorcourse.Main.render(Main.java:139)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:225)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)

导致问题的代码是以下代码:

String[] data = {"red", "orange", "yellow", "green", "blue", "pink", "orange_gravity_block"};
for(int i = 0; i < data.length; i++){
    if(fa.getUserData() != null && fa.getUserData().equals(data[i])){
            if (fb.getUserData() != null && fb.getUserData().equals("evile_left_sensor")) {
                ((EvilE)fb.getUserData()).reverseVelocity(); //this causes error
            }else if (fb.getUserData() != null && fb.getUserData().equals("evile_right_sensor")) {
                ((EvilE)fb.getUserData()).reverseVelocity(); //this causes error
            }
        }   
    }

在我的Play类中,此代码将userdata设置为Evil-E(敌人):

 EvilE c = new EvilE(body, game);
 eviles.add(c);
 body.setUserData(c);

冲突全部发生在我的Contact Listener中,而我尝试访问的敌人(EvilE)在我的Play类(PlayScreen)中。

可以预期的是,当我的敌人撞到墙壁时,他们会改变方向,但是他们却没有改变方向,而是游戏崩溃了,我得到了以前显示的错误。 我该如何解决?

谢谢!

您正在将EvilE对象设置为用户数据

 EvilE c = new EvilE(body, game);
 eviles.add(c);
 body.setUserData(c); // c is an EvilE object

在这里,您期望得到一个字符串:

fa.getUserData().equals(data[i]) //fa.getUserData() is EvilE and data[i] is a String

在这里,您尝试在相等时将EvilE对象与String对象进行比较。 在某个时候, EvilE.equals方法将String EvilE.equals转换为EvileE类型,这就是为什么要获取java.lang.ClassCastException的原因。

编辑

您可以将属性添加到EvilE对象中,例如String status并通过该属性进行比较。 例如((EvilE)fa.getUserData()).getStatus().equals(data[i])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM