在我正在进行的游戏中,我有一座能射击敌人的塔。当敌人进入射程时,我试图让我的塔射向敌人。我的火球出现了,但是我有问题将火球移动到敌人身上。我的最新尝试只是让球在屏幕上跳舞。
球有x和y位置(类似球开始的位置)。 球也有一个新的X和新的位置,其中是敌人的位置。我正在考虑做毕达哥拉斯式的理论,但这只能让我知道我要去的那条线的长度。然后我在网上搜索并发现了关于罪,cos和atan的信息。我正在使用atan来获得我计算出的斜率的角度,然后将角度插入到sin和cos中。
My Ball :: Update功能如下所示:
int dx = newX - x;
int dy = newY - y;
int ang = atan(dy, dx);
x += cos(ang);
y += sin(ang);
那里的代码让球看起来像是在跳舞'屏幕上。它完全没有移动。我用这些代码测试了我的代码:
x + = cos(45); y + = sin(45);
球以45度角(向东南方向)移动,这是预期的。所以我猜测我的错误是在计算角度时。任何可以提供帮助的数学专家?
答案 0 :(得分:1)
这是一个用于演示linear interpolation对(x,y)的小样本:
#include <iostream>
int main()
{
double x0 = 2.0, y0 = 3.5;
double x1 = 7.0, y1 = 2.0;
// do linear interpolation in n steps
enum { n = 10 };
for (int i = 0; i <= n; ++i) {
double t = (double)i / n;
double xT = (1.0 - t) * x0 + t * x1;
double yT = (1.0 - t) * y0 + t * y1;
std::cout << i << ":\tt: " << t << ",\tx: " << xT << ",\ty: " << yT << '\n';
}
// your code goes here
return 0;
}
输出:
0: t: 0, x: 2, y: 3.5
1: t: 0.1, x: 2.5, y: 3.35
2: t: 0.2, x: 3, y: 3.2
3: t: 0.3, x: 3.5, y: 3.05
4: t: 0.4, x: 4, y: 2.9
5: t: 0.5, x: 4.5, y: 2.75
6: t: 0.6, x: 5, y: 2.6
7: t: 0.7, x: 5.5, y: 2.45
8: t: 0.8, x: 6, y: 2.3
9: t: 0.9, x: 6.5, y: 2.15
10: t: 1, x: 7, y: 2