我目前在游戏中有以下代码:

Vector2 pixelpos = new Vector2(x, y);
Vector2 center = new Vector2(t.Width / 2, t.Height / 2);

Vector2 pixelposWorld = (pixelpos - center);

float rotation = (float)Math.Atan2(pixelposWorld.Y, pixelposWorld.X);
float rotationPercent = (MathHelper.ToDegrees(rotation) / 360);


我的目标是最终将rotationPercent设置为0.0和1.0之间的值,0度为0.0,180度为0.5,360度为1.0。

当前,rotationPercent仅显示为1.0。

我该怎么做才能解决此问题?

最佳答案

首先,在您的情况下,无需将其转换为度,因为Math.aTan2返回以弧度表示的角度,只需将旋转变量除以(2 * Pi)。

其次,在“ t.Width / 2,t.Height / 2”处检查您在做什么,因为您没有在问题中指定“ t”是什么,请确保它的成员不是整数。

现在,就您自己的问题而言,没有提供足够的信息。它在哪里包含您的轮换信息? “ pixelpos”矢量是您在世界空间中的位置,还是也将其用作旋转?

回到最低限度,以下代码大致像您描述的那样工作?

Vector2 pixelpos = new Vector2(0, 1);
float rotation = (float)(Math.Atan2(pixelpos.Y, pixelpos.X) / (2 * Math.PI));


结果为0.25或90度。

10-07 18:10