LibGdx弓箭游戏物理

LibGdx弓箭游戏物理,libgdx,2d,physics,Libgdx,2d,Physics,我正在开发一个用LibGdx引擎和Java编写的新游戏。 我对这个游戏中的一些物理问题有疑问 我想以弹道射箭(愤怒的小鸟风格) 找不到这样做的方程式 我使用这些速度方程: float velx = (float) (Math.cos(rotation) * spd); float vely = (float) (Math.sin(rotation) * spd); 我将其添加到当前位置,箭头朝一个方向发射-直 我想也许改变旋转可以帮助我实现我想要的(弹道路径) 这确实有帮助,但

我正在开发一个用LibGdx引擎和Java编写的新游戏。 我对这个游戏中的一些物理问题有疑问

我想以弹道射箭(愤怒的小鸟风格) 找不到这样做的方程式

我使用这些速度方程:

    float velx = (float) (Math.cos(rotation) * spd);
    float vely = (float) (Math.sin(rotation) * spd);
我将其添加到当前位置,箭头朝一个方向发射-直

我想也许改变旋转可以帮助我实现我想要的(弹道路径)

这确实有帮助,但我也想知道轨迹

我看到了这个 已发布但不知道如何使用的ProjectleEquation类:

 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);

            }

for(int i=0;i您发布的ProjectleEquation类看起来将计算给定时间增量的X和Y位置,因此您传入的浮点值应该是自开始箭头移动以来的时间增量(以秒为单位)

不过,该代码不会给出箭头的角度。要找到这个角度,我建议您保留上一个X和Y,然后可以使用Math.atan2()根据上一个XY和当前XY计算角度。谷歌atan2获取有关如何使用它的大量信息

但是,最好的方法是使用Box2d并正确地模拟场景。这样你就不必参与数学。我在某个地方读到《愤怒的小鸟》就是这么用的,这是模拟此类物理游戏的一个很好的选择


我希望你的游戏能顺利进行。

你需要什么?我理解得不够好。你需要渲染你的轨迹吗?是的,无法使用此类进行渲染如果你没有空气阻力,那么你的轨迹就是简单的抛物线。等式我需要它来改变箭头飞行时的角度,并理解如何使用此等式离子进入代码,重力,Nah此时不使用空气阻力。仅使用方程渲染轨迹。对于运动,在开始时设置矢量速度,然后在更新方法中使用velocity.y-=gravity.y*deltaTime;更改身体的速度(velocity.x保持不变)。使用velocity.angle获得箭头的角度。