Меня немного смущает метод beginContact из box2d.
У меня есть класс Runner , который порождает в игре одного бегуна.В игре у меня есть несколько бегунов, и я хочу обнаружить столкновение между конкретным экземпляром бегуна и препятствием.В beginContact () Я хочу запустить hit () метод для раннера, которого ударили.
public void beginContact(Contact contact) {
final Body a = contact.getFixtureA().getBody();
final Body b = contact.getFixtureB().getBody();
if ((BodyUtils.bodyIsRunner(a) && BodyUtils.bodyIsEnemy(b)) ||
(BodyUtils.bodyIsEnemy(a) && BodyUtils.bodyIsRunner(b))) {
Runner c;
if(BodyUtils.bodyIsRunner(a)) c = (Runner) a.getUserData();
else c = (Runner) b.getUserData();
c.hit();
Но в этой строке:
if(BodyUtils.bodyIsRunner(a)) c = (Runner) a.getUserData();
Игра вылетает с исключением:
com.pl.runner.box2d.RunnerUserData cannot be cast to com.pl.runner.entities.Runner
Я не знаю, как с этим справиться сейчас, так что еслилюбой может дать совет или решение, я буду очень благодарен.Возможно, я упускаю что-то простое, я застрял в этом коде слишком долго.
Вот класс RunnerUserData:
public class RunnerUserData extends UserData {
private final Vector2 runningPosition = new Vector2(Constants.RUNNER_X, Constants.RUNNER_Y);
private final Vector2 dodgePosition = new Vector2(Constants.RUNNER_DODGE_X, Constants.RUNNER_DODGE_Y);
private Vector2 jumpingLinearImpulse;
public RunnerUserData(float width, float height) {
super(width,height);
jumpingLinearImpulse = Constants.RUNNER_JUMPING_LINEAR_IMPULSE;
userDataType = UserDataType.RUNNER;
}
public Vector2 getJumpingLinearImpulse() {
return jumpingLinearImpulse;
}
public void setJumpingLinearImpulse(Vector2 jumpingLinearImpulse) {
this.jumpingLinearImpulse = jumpingLinearImpulse;
}
public float getHitAngularImpulse() {
return Constants.RUNNER_HIT_ANGULAR_IMPULSE;
}
public float getDodgeAngle() {
// In radians
return (float) (-90f * (Math.PI / 180f));
}
public Vector2 getRunningPosition() {
return runningPosition;
}
public Vector2 getDodgePosition() {
return dodgePosition;
}
}