【问题标题】:Find the selected segment in a wheel of fortune spinning wheel在幸运转轮中找到选定的段
【发布时间】:2018-07-26 07:51:22
【问题描述】:

在 Unity 中,我有一个随时间旋转的圆形精灵。

private void Update()
{
    transform.Rotate(0, 0, 10 * Time.deltaTime);
}

我想从这个圆圈中计算 n 件。一些例子:

片段的数量由数组的长度给出

private void SplitCircle(Part[] parts)
{
    // split the circle by the amount of parts
}

我只需要计算一下。我不需要 UI 部分!

每一块都从圆上取 (360 / n) 度。当有 5 件时,第一部分的范围应为 0 到 72。第二部分的范围应为 73 到 144,依此类推。

在我的场景中,我有一个按钮可以停止圆圈的旋转。按下按钮时是否可以计算出哪个部分在上面?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    将圆旋转值标准化为 0 到 360 之间(旋转 % 360)。

    依次从每个段范围内的每个数字中减去此值。对于每个段,找到调整范围值的底部在下限处 = 0 的段。选择那个。

    如果选定的段不在,将预标准化旋转值调整 90 度,直到结果与您的“向上”相符。

    另外,你的范围不应该是 0..72、73..144 等。那么 72.5 度呢?它应该是 72..144,下限为 >=,上限为 <.>

    在未经测试的 C#ish 伪代码中...

    var adjust = 0; /* Adjust this +/- 90 if the result comes out with the wrong result */
    var spriteRotation = (getSpriteRotationDegrees() + adjust) % 360.0f;
    for (var i = 0; i < parts.length; i++) {
        var lowerBound = parts[i].lowerBound() - spriteRotation;
        var upperBound = parts[i].upperBound() - spriteRotation;
        if (lowerBound < 0 && upperBound >= 0) {
            break;
        }
    }
    var winningPart = parts[i];
    

    【讨论】:

    • 对不起,您介意提供一些代码,因为我不知道如何将其转换为代码,因为我数学不够好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多