我的游戏中有雷达。现在,雷达的工作原理是使用静态的X,Y图形,它不会根据你在游戏中的表现而旋转。
我希望雷达上的X,Y位置根据您所面对的方向旋转。在你面前的怪物将始终出现在雷达的顶端。
目前,雷达是静止的,你北方的怪物将始终出现在雷达北方。
目前,我有这样的数学:
int x = (int)(x * Math.Cos(Math.PI * angle / 180) + y * Math.Sin(Math.PI * angle / 180));
int y = (int)(y * Math.Cos(Math.PI * angle / 180) - x * Math.Sin(Math.PI * angle / 180));
然后我将中心X和中心Y添加到上面的整数,但图形很奇怪,似乎只能从359度角度工作。我在尝试计算之前尝试添加中心X和中心Y,但它总是关闭。
我在网上找到的其他代码根据度数/角度进行了区分。
if (angle >= 0 && angle <= 180)
{
x = (int)(x * Math.Cos(Math.PI * angle / 180) - y * Math.Sin(Math.PI * angle / 180));
y = (int)(x * Math.Sin(Math.PI * angle / 180) + y * Math.Cos(Math.PI * angle / 180));
}
else
{
x = (int)(x * Math.Cos(Math.PI * angle / 180) - y * Math.Sin(Math.PI * angle / 180));
y = (int)(x * Math.Sin(Math.PI * angle / 180) + y * Math.Cos(Math.PI * angle / 180));
}
我需要采用正确的公式X中心X(cX),中心Y(cY),我面对的角度和目标X(tX),目标Y(tY)以重新定位目标X&amp;收率
答案 0 :(得分:2)
显而易见的答案是使用相同的旋转代码来旋转你的视角来旋转雷达坐标,但我想你出于某种原因拒绝了它。
所有示例代码错误x
都被覆盖,然后用于查找y
的新值。 那永远不会起作用。
基本的基本旋转公式如下所示:
x2 = (int)(x * Math.Cos(Math.PI * angle / 180) - y * Math.Sin(Math.PI * angle / 180));
y2 = (int)(x * Math.Sin(Math.PI * angle / 180) + y * Math.Cos(Math.PI * angle / 180));
但如果付款人离开0,0你会想要
x2 = (int)((x - player_x) * Math.Cos(Math.PI * angle / 180) - (y - player_y) * Math.Sin(Math.PI * angle / 180));
y2 = (int)((x - player_x) * Math.Sin(Math.PI * angle / 180) + (y - player_y) * Math.Cos(Math.PI * angle / 180));
将雷达上的0,0保持在以玩家为中心
根据你的游戏测量角度,你可能需要交换Sin术语上的符号。