2017-03-05 109 views
0

我正在用libGDX開發一款遊戲。我有一個問題:如圖所示,知道初始座標和目標座標,如何實現子彈的拋物線效應?實現炮彈的操作。誰可以教我?或者告訴我一些教程。 TKS如何用libGDX實現以下效果?

圖片

enter image description here

+0

你需要Box2D來實現這些。 – Sparcsky

+0

要確定達到某個目標的初始速度,我認爲你需要一些基本的大學新生水平微積分。 – Tenfour04

+0

這與libgdx無關,這是基礎物理。 – Hllink

回答

0

你需要一些物理添加到您的應用程序(例如:Box2D的)。然後你用一些速度和某個方向/角度「扔」佳能球。 物理引擎爲你休息。 在這裏你有教程box2d:https://www.youtube.com/watch?v=vXovY2KTing

非常非常基本的例子拋出東西沒有box2d。對於你的例子,你需要爲目標位置計算正確的「權力」。

public class SampleApp extends ApplicationAdapter 
{ 
    Sprite sprite; 
    Vector2 velocity = new Vector2(0, 0); 
    Vector2 terminateVelocity = new Vector2(2000, 2000); 
    Vector2 friction = new Vector2(200, 300); 
    Vector2 position = new Vector2(0, 0); 
    Vector2 launchPower = new Vector2(0, 0); 
    boolean shotNow; 

    @Override 
    public void render() 
    { 
     update(Gdx.graphics.getDeltaTime()); 
     // ... 
     // here render your stuff 
    } 

    public void shot(float power) 
    { 
     // Calculate x launch power 
     launchPower.x = ((power - sprite.getX() + sprite.getWidth()*0.5f)/2f) + velocity.x; 
     // We want to end our fly at ground 
     launchPower.y = ((0 - sprite.getY())/2f) + velocity.y; 
     // Setup start position 
     position.x = sprite.getX(); 
     position.y = sprite.getY(); 
     // Add some acc to velocity 
     velocity.add(launchPower); 
     shotNow = true; 
    } 

    public void update(float dt) 
    { 
     if (Gdx.input.justTouched()) { 
      shot(900); 
     } 
     // Very basic sprite movement. 
     // For best results you should implement more physics (acceleration etc.) 
     if (shotNow && position.y > 0) { 
      // Friction/gravity 
      velocity.x = MathUtils.clamp(velocity.x - friction.x * dt, -terminateVelocity.x, terminateVelocity.x); 
      velocity.y = MathUtils.clamp(velocity.y - friction.y * dt, -terminateVelocity.y, terminateVelocity.y); 
      position.add(velocity.x * dt, velocity.y * dt); 
      sprite.setPosition(position.x, position.y); 
     } 
    } 
}