我正在使用Game Maker程序开发游戏(不是真正的游戏制作者),因为我用真实语言编写游戏(可以编写普通应用程序,而不是游戏)这么多次。
无论如何,在我使用方向功能的程序中,有时被证明是有缺陷的。但是对象的x和y速度总是正确的,所以我想计算那些方向角度(以度为单位)。不幸的是,我不是数学天才,我总是在三角学方面失败;(。你能帮助我吗?
我的游戏制作IDE的角度坐标系如下:
270 deg.
180 deg. 0 deg.
90 deg.
定位系统就像在大多数环境中一样(左上角为0,0)
答案 0 :(得分:11)
数学库通常带有一个名为atan2
的函数,仅用于此目的:
double angle = atan2(y, x);
角度以弧度为单位;乘以180 / PI转换为度数。角度范围从-pi到pi。 0角是正x轴,角度顺时针增长。如果您想要其他配置,则需要进行微小的更改,例如0角是负y轴,范围是0到359.99度。
使用atan2
代替atan
或任何其他反向触发功能的主要原因是它为您找出了正确的角度,并且您不需要一系列if-语句。
答案 1 :(得分:2)
使用arctangent功能。它应该是这样的:
double direction(double x, double y) {
if (x > 0)
return atan(y/x);
if (x < 0)
return atan(y/x)+M_PI;
if (y > 0)
return M_PI/2;
if (y < 0)
return -M_PI/2;
return 0; // no direction
}
(其中x和y是水平和垂直速度,M_PI是pi,atan是反正切函数。)
答案 2 :(得分:0)
在游戏制作者中,您可以使用以下内容:
direction = point_direction(x, y, x+x_speed, y+y_speed)
speed = point_distance(x, y, x+x_speed, y+y_speed)
(比较当前和未来的x / y坐标和返回值)
反转过程以获得x / y_speed:
x_speed = lengthdir_x(speed, direction)
y_speed = lengthdir_y(speed, direction)
Note: Added this post because its still viewed in relation to Game Maker:
Studio and its specific functions. Maybe it has no value for the person who
asked originally but i hope it will help some Game Maker users who wander here.