在点周围的周期性圆形路径中移动对象

时间:2016-09-11 02:29:04

标签: java math trigonometry

我现在正在制作游戏中的游戏,这个问题与某个游戏敌人的飞行路径有关。我试图让他们中的几个飞行编队,我们的想法是让他们围绕屏幕中心绕一个宽半径的圆圈飞行,这样他们就可以在玩家中装箱。为此,我尝试使用以下公式......

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

我无法弄清楚为什么这个等式似乎不起作用。当我测试运动模式时,屏幕上似乎有两个敌人围绕中心旋转,即使我只生成了一个。但是,他们的眨眼速度非常快,这使得船似乎可以快速地来回跳跃。这是因为当我拍摄截图时,只有一艘船。我的三角学是否会导致这种问题,或问题出在其他地方?

1 个答案:

答案 0 :(得分:1)

以下伪代码提供了使对象在圆形路径中移动的标准方法:

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