gpt4 book ai didi

java - Box2D 在碰撞后阻止动态物体移动

转载 作者:行者123 更新时间:2023-11-30 11:28:49 27 4
gpt4 key购买 nike

我正在尝试使用 LibGDX 和 Box2D 重新创建 Pong。我有 2 个问题,如果我解决了一个问题,就会产生另一个问题。

我的桨目前设置为运动学,并通过 Controller 类使用向上/向下键进行控制。这很好用,我可以愉快地来回播放。

问题是,我的墙是静止的物体,我的桨正好穿过它们。

现在我可以通过简单地将 Racket 主体更改为动态 Racket 来解决此问题,这会阻止 Racket 穿过墙壁,但是当我的球击中 Racket 时,它会飞离 X 轴并离开屏幕。

我尝试在我的 Controller 类中添加一个更新方法,如下所示:

public void update(float delta){
paddleBodyPosY = paddleBody.getPosition().x;
paddleBodyPosY = paddleBody.getPosition().y;
System.out.println(paddleBodyPosY);

}

控制台报告从屏幕顶部到底部每帧更新的桨位置。

所以我回到我的 GameScreen 类并尝试了 Render() 方法中的各种代码,如下所示:

    if(playerOnePaddle.paddleBodyPosY < 0){
playerOnePaddle.paddleBody.getPosition().y = 0;
System.out.println("resetting paddle");
}

我已经尝试了 LOADS 的变化,我可以通过调用 paddleBody.setLinearVelocity(0,0) 轻松中断运动,但它会像这样卡住并且不再可移动。显然问题一定在于我无法使用 setter/getter 设置位置。哈哈。

有什么想法吗?如果您需要更多片段,请询问,我不想用 100 行您不需要看到的代码使问题重载 :S。

Racket 制作方法:

public void createPaddle(World world, float x, float y){
//Define a body for the paddle
BodyDef paddleBodyDef = new BodyDef();
paddleBodyDef.type = BodyType.KinematicBody;
paddleBodyDef.position.set(x, y);

//Define a shape for the paddle
PolygonShape paddleShape = new PolygonShape();
paddleShape.setAsBox(paddleWidth, paddleHeight);

//Define a fixture for the paddle
FixtureDef paddleFixtureDef = new FixtureDef();
paddleFixtureDef.shape = paddleShape;
paddleFixtureDef.density = 0;

//Ensures ball bounces off paddle
//Consistently without losing velocity
paddleFixtureDef.restitution = 1.005f;

//Create the paddles
paddleBody = world.createBody(paddleBodyDef);
paddleFixture = paddleBody.createFixture(paddleFixtureDef);

paddleShape.dispose();

}

最佳答案

呵呵,原来我是这么干的。

将我的桨设置为动态,然后将质量设置为非常高的数字,这样球就不会在 x 轴上移动它们,至少人眼看不到。

似乎是一个便宜的修复,如果有人有更好的...那会很棒哈哈

关于java - Box2D 在碰撞后阻止动态物体移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18740508/

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