在我工作的游戏中,我有一座能向敌人射击的塔。当敌人进入射程时,我正试图让我的塔向敌人射击。我的火球出现了,但是我很难把火球移到敌人身上。我最近的尝试只是让球在屏幕上跳来跳去。
球有x和y的位置(类似于球开始的位置)。球也有一个newX和newY位置,它是敌人所在的位置。我在考虑做毕达哥拉斯理论,但这只得到了我想要进入的直线的长度。然后我在网上搜索,发现了罪恶,因为,和阿坦。我用atan来得到我计算的斜率的角度,然后把角度插入到sin和cos中。
My::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度的角度(向东南方向)移动,这是意料之中的。所以我猜我的错误是在计算角度时。有数学专家能帮忙吗?
发布于 2018-03-08 12:44:25
这是一个用于演示对(x,y)的linear interpolation的小示例:
#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: 2https://stackoverflow.com/questions/49173095
复制相似问题