我现在正在制作游戏中的游戏,这个问题与某个游戏敌人的飞行路径有关。我试图让他们中的几个飞行编队,我们的想法是让他们围绕屏幕中心绕一个宽半径的圆圈飞行,这样他们就可以在玩家中装箱。为此,我尝试使用以下公式......
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;
}
我无法弄清楚为什么这个等式似乎不起作用。当我测试运动模式时,屏幕上似乎有两个敌人围绕中心旋转,即使我只生成了一个。但是,他们的眨眼速度非常快,这使得船似乎可以快速地来回跳跃。这是因为当我拍摄截图时,只有一艘船。我的三角学是否会导致这种问题,或问题出在其他地方?
答案 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);