gpt4 book ai didi

java - LibGDX box2d 检测对象的特定实例

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:38 26 4
gpt4 key购买 nike

我对 box2d 的 beginContact 方法有点困惑。

我有一个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 无法转换为 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;
}
}

最佳答案

您的问题由异常简单地描述,您试图将 RunnerUserData 转换为 Runner,但您无法执行此操作,因为 Runner 不是 RunnerUserData 的实例。

解决这个问题的方法是将实际的 Runner 对象作为用户数据传递,例如body.setUserdata(this)(在 Runner 类中)。

您可以使用以下内容来确定夹具的用户数据是否是 Runner 对象:

if (body.getUserData() instanceof Runner) {}

我建议将用户数据作为您拥有的每个主体的对象,这样可以更轻松地查找它。

关于java - LibGDX box2d 检测对象的特定实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50563668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com