LibGdx弓箭游戏物理

时间:2014-12-27 15:10:52

标签: libgdx 2d physics

我正在开发一款用LibGdx Engine和Java编写的新游戏。 我在游戏中遇到了一些物理问题。

我想以弹道轨迹拍摄箭头(愤怒的小鸟风格) 并且无法找到这样做的等式。

我正在使用这些速度方程式:

    float velx = (float) (Math.cos(rotation) * spd);
    float vely = (float) (Math.sin(rotation) * spd);

我将它添加到当前位置,箭头向一个方向射击 - 直线。

我想也许改变轮换会帮助我实现我想要的(弹道)。

它确实有帮助,但我也希望有这个轨迹。

我看到了这个 ProjectileEquation类,有人已经发布但不知道如何使用它:

 public class ProjectileEquation
{

  public float gravity;  
    public Vector2 startVelocity = new Vector2();  
    public Vector2 startPoint = new Vector2();  
    public Vector2 gravityVec = new Vector2(0,-10f);

    public float getX(float n) {  
        return startVelocity.x * (n ) + startPoint.x;  
    }  

    public float getY(float n) {
        float t = n;
        return 0.5f * gravity * t * t + startVelocity.y * t + startPoint.y;  
    }  

}

我正在寻找帮助,帮助我将这个课程用于弹道轨迹。

这是我尝试使用它的方式:

    for(int i =0;i<30;i++)
            {
                Texture f = ResData.Square_1;
                ProjectileEquation e= new ProjectileEquation();
                e.gravity = 1;
                e.startPoint = new Vector2(bow.getX(),bow.getY());//new Vector2(-bow.getX(),-bow.getY()); //My bow is opposite so it suppose to work fine
                e.startVelocity = getVelocityOf(bow.getRotation());
                Vector3 touchpos = new Vector3();

                s.draw(f,e.getX(i) ,e.getX(i),5,5);

            }

1 个答案:

答案 0 :(得分:0)

你发布的ProjectileEquation类似乎会在给定时间增量的情况下计算X和Y位置,因此你传入的浮点数应该是你开始移动箭头后的时间增量(以秒为单位)。

该代码不会给你箭头的角度。为了找到这个,我建议你保持前面的X和Y,然后你可以使用Math.atan2()来计算基于前一个XY和当前XY的角度。 Google atan2提供了有关如何使用它的大量信息。

然而,最好的方法是使用Box2d并正确建模场景。那么你根本不需要参与数学计算。我在某处读到了“愤怒的小鸟”所使用的东西,并且是对这些物理游戏进行建模的绝佳选择。

我希望你的比赛进展顺利。