Java / LibGDX получает спрайт из пользовательских данных - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь получить доступ к спрайту из пользовательских данных приборов, которые должны нормально работать, но выдает мне эту ошибку:

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 этот код устанавливает пользовательские данные для Evil-E (врага):

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

Все столкновения происходят в моем приемнике контактов, а враг, к которому я пытаюсь получить доступ (EvilE), находится в моем классе Play (PlayScreen).

То, что ожидается от моих врагов, это изменить направление, когда они ударяются о стену, но они этого не делают - вместо этого игра вылетает, и я получаю ошибку, которую я показывал ранее. Как мне это исправить?

Спасибо!

1 Ответ

1 голос
/ 19 апреля 2019

Вы устанавливаете объект EvilE в userdata

 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 объект со строкойобъект на равенство.В какой-то момент в EvilE.equals метод String преобразуется в EvileE тип, и поэтому вы получаете java.lang.ClassCastException.

РЕДАКТИРОВАТЬ

ВыМожно добавить свойство в объект EvilE, например, String status и сравнить по этому свойству.например, ((EvilE)fa.getUserData()).getStatus().equals(data[i])

...