【问题标题】:Throwing a bomb in LibGDX Box2D在 LibGDX Box2D 中投掷炸弹
【发布时间】:2014-11-11 15:12:22
【问题描述】:

我正在尝试创建没有人投掷炸弹的游戏。我想知道如何让炸弹以如下图所示的方式做出反应:

Box2D 中是否有任何工具可以帮助我实现这一目标? 我已经制造了受重力和力影响的炸弹。但我不知道我需要如何投掷炸弹?

我是如何制造炸弹的

Body bomb;
BodyDef bdef = new BodyDef();
FixtureDef fdef = new FixtureDef();

CircleShape bombBall = new CircleShape();

bdef.type = BodyType.DynamicBody;
fdef.restitution = 0.4f;

bigBall.setRadius(1f/PPM);
bdef.position.set(0/PPM, 10f/PPM);

fdef.shape = bombBall;
fdef.density = 0;

ball = world.createBody(bdef);
ball.createFixture(fdef);

在我的渲染方法中,我应用了线性脉冲

ball.applyLinearImpulse(.09f, 0.09f, ball.getPosition().x, ball.getPosition().y, true);

【问题讨论】:

  • 我猜你需要给身体施加一个冲动。
  • 好的,但是有很多冲动。以及我需要如何使用它,炸弹可以以图片所代表的方式做出反应。我需要我的炸弹向上(y 坐标增加)并且 y 坐标减少。
  • 我猜是 applyLinearImpulse (libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/…),前 2 个参数是每个方向的强度(更高的 y 脉冲会导致更高的曲线),接下来的 2 个是指向你想施加冲动,我猜你的情况是质心

标签: libgdx box2d gravity


【解决方案1】:

正如 cmets 中提到的,您需要对炸弹应用线性脉冲。这是很容易的事情。你只需要做这样的事情

body.applyLinearImpulse(your_x_impulse,your_y_impulse, body.getPosition().x, body.getPosition().y, true);

其中 your_x_impulse 和 your_y_impulse 分别是质量*速度 x 和 y。

【讨论】:

  • 好的,感谢您的回答。但是看,当我在某个时刻应用y_impulse 时,冲动需要为正(炸弹需要通过y-axis 向上移动,然后冲动需要为负,因为只有这样炸弹才能落下)。 Box2D 中是否有任何类可以满足我的要求?(除了这个网站iforce2d.net/b2dtut/projected-trajectory,我在网上找不到任何有用的东西
  • Impulse 设置身体的初始速度。那么身体的运动只能靠重力来维持。
  • 好的,我刚刚更新了我的代码,因为不知何故我没有达到我想要的效果。编辑 robably 我明白了。我无法在渲染方法中设置线性脉冲。我需要在我创建球的构造函数中设置它。谢谢!
  • @user3334375 你是正确的,render 方法不是正确的方法,因为它每秒被调用多次,但脉冲只需要应用一次。正如 nikoliazekter 已经提到的那样,脉冲会设定物体的速度,然后随着时间的推移受到重力(力)的操纵,从而使炸弹按照您的意愿飞行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多