[英]Projectile velocity box2d
我想从屏幕的右下角向屏幕的左侧发射弹丸。 现在,我希望弹丸根据屏幕尺寸以随机的速度和角度飞行,就像这样。 现在,我知道这很简单,但是由于某种原因,我无法设法完成这项工作。
到目前为止,这是我尝试过的:
我的第一次尝试-启动功能
private void launchProjectile() {
projectiles.peek().getBody().applyForce(projectiles.peek().getBody().getWorldVector(new Vector2(MathUtils.random(-20,-1*SCALAR_HEIGHT),
MathUtils.random(2*SCALAR_HEIGHT,8*SCALAR_HEIGHT)).scl(MathUtils.random(3*SCALAR_HEIGHT,5*SCALAR_HEIGHT))),
projectiles.peek().getBody().getWorldCenter(), true);
Gdx.app.log("System", String.valueOf(SCALAR_HEIGHT));
}
这是我的第二次尝试-启动功能
private void launchProjectile() {
float xVelocity;
float yVelocity;
xVelocity = (float) MathUtils.random(0,0)*SCALAR_WIDTH/2;
yVelocity = (float) MathUtils.random(20,20)*SCALAR_HEIGHT;
velocityProjectile.set(xVelocity,yVelocity); // Sets the velocity vector to the above values
velocityProjectile.sub(projectiles.peek().getBody().getPosition());
velocityProjectile.nor(); // Normalize the vector - Now it's fine and ready!
// Sets the start velocity of the projectile Trajectory to the current velocity
projectiles.peek().getBody().setLinearVelocity(velocityProjectile.scl(18+SCALAR_HEIGHT));
}
在这两次尝试中,弹丸的飞行方式都比我需要的要多,并且它并未考虑应有的屏幕尺寸。
你们能告诉我什么是正确的方法吗?
谢谢!!
从此页面开始: http : //www.iforce2d.net/b2dtut/projected-trajectory
在“应该以多快的速度发射到期望的高度?” 部分,您将看到使弹丸到达屏幕顶部所需的垂直速度。 因此,您应该选择一个比该数字小的随机数,以确保它不会超出屏幕顶部。
接下来,在“它将涨多高?”中 部分,您可以查看公式以找出弹丸达到最大高度需要多少时间。 然后,将花费相同的时间返回到初始高度。 例如,假设要花60个时间步才能达到最大高度。 这意味着需要120个时间步才能再次下降到与开始时相同的高度。 然后,您可以设置发射速度的水平部分,以使其在120个时间步内不会超出屏幕。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.