我目前在我的游戏中有这个代码:
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);
Run Code Online (Sandbox Code Playgroud)
我的目标是最终使 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));
Run Code Online (Sandbox Code Playgroud)
结果为 0.25 或 90 度。
| 归档时间: |
|
| 查看次数: |
10803 次 |
| 最近记录: |