0

小さな 2D ゲームのタイルを表す単純な値 (1,1,2,1...) を格納する配列を作成しました。

この配列に回転 (および余分な) パラメーターをストックしたいので、値に小数を追加しました: 1.45、1.90、2.0、1.90 ... たとえば、1.45 は、草のタイル (1) が必要であることを意味します。 45°。

小数を「解析」するには、次のようにします。

arr[0] = 2.9;
rot = arr[0] - Math.floor(arr[0]);

0.9を取得する必要がありますが、代わりに0.89999を取得します。

AS3 でのこの簡単な減算が正しくない理由は何ですか? または、これらの「余分な」パラメーターをストックする別の配列を作成する必要がありますか?

あなたのライトをありがとう

4

3 に答える 3

3

これは、浮動小数点数に固有の問題です。を使用して数値を小数点以下の桁数に丸めることもrot = rot.toFixed(2)、わずかな違いを無視することもできます。それらを合計すると、かなりの時間がかかります。

余談ですがrot = arr[0] % 1、小数点以下の部分を取得するために使用できます。

小数を使用して回転値を保存することは、特に100度までの回転しか許可されていないため、最適ではないようです。さらに、タイルの種類や回転よりも多くの値を保存したい場合はどうでしょうか。複数の配列(またはカスタムクラスのオブジェクトの配列)を使用するのが最適な場合があります。

于 2012-06-18T20:23:54.923 に答える
0

Actionscriptは浮動小数点を使用します。多くの小数は正確に表現できません。

別の配列を使用して追加のパラメーターを処理したり、値に静的な値を掛けたりすることができます... 1,000など?これにより、余分なパラメータがユニット全体に移動します。1000を使用すると、0〜359°の任意の値を設定できます。ただし、減算または加算からのキャリーを評価するには、追加の解析を行う必要があります。

たぶん別の配列が最適でしょう...:)

于 2012-06-18T20:20:57.643 に答える
0

NumberAS3では浮動小数点であるオブジェクトを減算しています。浮動小数点数には本質的に精度の問題があります。理由は次のとおりです

最も簡単な解決策は、答えを丸めることです。

var arr:Array = [];
arr[0] = 2.9;
var rot:Number = Number(arr[0]) - Math.floor(arr[0]);
var rounded:Number = Number(rot.toFixed(1));
于 2012-06-18T20:23:07.427 に答える