[英]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.