2

Wheel of Fortune のようなゲームを構築しようとしていますが、実際には完了していますが、理解できない奇妙な問題があるようです。

これはホイール自体です。値が均等に配置され、それぞれが 15 ° のスライスを持っていることがわかります。

ここに画像の説明を入力

ホイールを回転させるために、度単位の回転量となる乱数を生成し、ホイールをアニメーション化し、すべて問題ありませんが、回転が停止すると、上部中央の位置で停止するホイールから値を取得する必要があるため、私はこれで解決しますが:

wheelValues = [
    1000, 3250, 1800, 1000, 1200, 3750, 5000, 1000, 3000, 1600, 1000, 3500,
    1000, 2000, 1000, 2750, 1000, 4000,   -1, 1000, 2500, 1400, 1000, 2250
];

if (toAngle > 360)
{
    toAngle = toAngle - (Math.floor(toAngle / 360) * 360);
}
arrIndex = Math.floor(toAngle / 15) + 1;
result = wheelValues[arrIndex];

私が生成するランダムなスピンはどこにtoAngleあり、370 から 1440 の間である可能性があります。

この方法は 10 回のうち約 8/9 回で機能し、ホイールが停止する正確な値を実際に取得できますが、値がずれている場合がある理由がよくわかりません (正しい値に近くなくても実際にずれている場合もあります)。 .

4

3 に答える 3

1

私が見ることができる2つの問題。

まず、この行:

 if (toAngle > 360)

toAngle == 360 の場合、「モジュラス」セクションをスキップし、toAngle が最終的に 24 (データセットよりも大きい) になるため、エラーが発生すると思います。

2番:

arrIndex = Math.floor(toAngle / 15) + 1;

最初の値を取得することはなく、場合によっては配列の境界を超えることがあるため、これを +1 する必要はありません。

また、奇妙な値が得られる理由について、仮定をデバッグするための簡単なコードを作成しようとしましたか? 370 から 1440 (指定された入力境界) まで反復するループを作成し、各値に対して計算がどのようになるかを確認します。ファイルまたは画面に印刷すると、すばやくスキャンして問題がどこにあるかを確認できます。

于 2012-06-01T06:45:54.680 に答える