2017-03-05 102 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); 
     } 
    } 
}