示例:用球速60 kpH /
射出的大炮鉴于:(60 kpH) 距离= 60公里, 时间= 1小时
Libgdx:GameWorld
// Given that I am using 1/45.0f step time, the rest iteration velocity 6 and position 2
// Given that 60.00012 kilometres per hour = 16.6667 metres per second
float speed = 16.6667f; // 16.6667 metres per second
Vector2 bulletPosition = body.getPosition();
Vector2 targetPosition = new Vector2(touchpoint.x touchpoint.y);
Vector2 targetDirection = targetPosition.cpy().sub(bulletPosition).scl(speed);
问题: 但我的问题是炮弹没有以我想要的速度移动,我如何记录车身速度以便我可以检查速度是否正确。我只是注意到这是错误的,因为炮弹移动的速度很慢,想象一下60 kpH
PS: 假设上面的图片宽度是5米,高度是3米
body.setLinearVelocity(targetDirection.scl(deltaTime));
问题2: 我不知道如何按给定的速度和步进时间计算力
// Given that F = ma
Vector2 acceleration = ???
float mass = body.getMass();
Vector2 force = ???
body.applyForces(force);
答案 0 :(得分:2)
在Box2d中,不是直接施加力而是应用一个脉冲,这是一段时间施加的力,这有效地导致近乎瞬时的加速度。计算你的冲动只是一点物理。
首先我们定义一些变量,F
是以牛顿为单位的力,a
是加速度,I
是脉冲(我们想要计算以应用于Box2d),{{ 1}}是初始速度(米/秒),u
是最终速度,v
是以秒为单位的时间。
使用牛顿定律和加速定义我们从:
开始
现在我们可以计算出冲动:
在你的情况下,t
为0,因为炮弹最初处于静止状态,因此归结为:
就是这样!所以,在你的代码中,你会在炮弹上施加一个等于它的质量乘以所需速度的脉冲。以下代码还包含如何计算touchPoint的方向。
E.g:
u
编辑:回复评论:
归一化向量是单位长度向量,意味着它的大小为1(无论它处于哪个角度)。视觉解释(来自维基百科):
向量float mass = body.getMass();
float targetVelocity = 16.6667f; //For 60kmph simulated
Vector2 targetPosition = new Vector2(touchpoint.x, touchpoint.y);
// Now calculate the impulse magnitude and use it to scale
// a direction (because its 2D movement)
float impulseMag = mass * targetVelocity;
// Point the cannon towards the touch point
Vector2 impulse = new Vector2();
// Point the impulse from the cannon ball to the target
impulse.set(targetPosition).sub(body.getPosition());
// Normalize the direction (to get a constant speed)
impulse.nor();
// Scale by the calculated magnitude
impulse.scl(impulseMag);
// Apply the impulse to the centre so there is no rotation and wake
// the body if it is sleeping
body.applyLinearImpulse(impulse, body.getWorldCentre(), true);
和d1
都是单位向量,因此称为规范化。在d2
中,Vector2
函数通过将矢量保持在相同的角度但使其大小为1来使矢量归一化。如下图所示(蓝色是原始矢量,绿色是标准化后):
对于你的游戏来说,重点在于无论玩家是否接触到非常接近或远离炮弹的屏幕,炮弹都以相同的速度行进,重要的是与大炮的角度。