Java 以周期性的圆形路径围绕点移动对象

Java 以周期性的圆形路径围绕点移动对象,java,math,trigonometry,Java,Math,Trigonometry,我现在正在做一个游戏,游戏堵塞,问题与某个游戏敌人的飞行路径有关。我试着让他们中的一些人以队形飞行,这个想法是让他们围绕屏幕中心以一个大半径的圆圈飞行,这样他们基本上就可以在播放器中飞行。为此,我尝试使用以下公式 public Pair<Double> move(Pair<Double> currPos, Pair<Double> playerPos) { Pair<Double> newPos = new Pair<

我现在正在做一个游戏,游戏堵塞,问题与某个游戏敌人的飞行路径有关。我试着让他们中的一些人以队形飞行,这个想法是让他们围绕屏幕中心以一个大半径的圆圈飞行,这样他们基本上就可以在播放器中飞行。为此,我尝试使用以下公式

    public Pair<Double> move(Pair<Double> currPos, Pair<Double> playerPos) {
        Pair<Double> newPos = new Pair<>(currPos.x, currPos.y);

        // The radius used as the distance from the center.
        double r = (Framework.CANVAS_WIDTH / 2) - Player.SHIP_SIZE;
        // X,Y coords for center of the screen.
        double cX = (Framework.CANVAS_WIDTH / 2);
        double cY = (Framework.CANVAS_HEIGHT / 2);
        // Trigonometric equation for transforming the object in a circle.
        newPos.x = cX + (r * Math.cos(Framework.getHypotenuse(currPos, new Pair<Double>(cX, cY)) + (Math.PI / 90)));
        newPos.y = cY + (r * Math.sin(Framework.getHypotenuse(currPos, new Pair<Double>(cX, cY)) + (Math.PI / 90)));

        return newPos;
    }
公共配对移动(配对currPos、配对playerPos){
Pair newPos=新的Pair(当前位置x,当前位置y);
//用作距中心距离的半径。
双r=(Framework.CANVAS\u WIDTH/2)-Player.SHIP\u SIZE;
//X,Y坐标表示屏幕的中心。
双cX=(Framework.CANVAS_WIDTH/2);
双cY=(Framework.CANVAS_HEIGHT/2);
//圆内物体变换的三角方程。
newPos.x=cX+(r*Math.cos(Framework.get斜边(currPos,newpair(cX,cY))+(Math.PI/90));
newPos.y=cY+(r*Math.sin(Framework.get斜边(currPos,newpair(cX,cY))+(Math.PI/90));
返回newPos;
}

我弄不明白为什么这个方程式似乎不起作用。当我测试移动模式时,屏幕上似乎有两个敌人围绕中心旋转,尽管我只产生了一个。然而,他们眨眼的速度真的很快,这让人觉得可能飞船在快速地来回跳跃。这一点得到了一个事实的支持,那就是当我截图时,只有一艘船。我的三角学有什么问题会导致这种情况,还是问题出在其他地方?

以下伪代码给出了使对象沿圆形路径移动的标准方法:

double r  = (...);  // Radius of circle
double cX = (...);  // x-coordinate of center of rotation
double cY = (...);  // y-coordinate of center of rotation

double omega = (...);  // Angular velocity, like 1
double t = (...);  // Time step, like 0.00, 0.01, 0.02, 0.03, etc.

newPos.x = cX + r * Math.cos(t * omega);
newPos.y = cY + r * Math.sin(t * omega);

你的时间变量在哪里?我不确定我需要一个。可能它只是移动得很快吗?t是delta时间变量吗?是的。你在每个framefacepalm上给它一个线性增加的值是的,这可以解释它。我想我忘了包括它。我通过delta time添加了时间变量,但是现在它仍然在来回跳跃,但是在x轴的另一端,就像在屏幕中央一样。它们有点抖动,但移动不正常。可以添加
System.out.println(t)并查看是否得到线性增加的值?