12

Android は、ビットマップの描画に RectF 構造を使用します。私はゲーム構造に取り組んでいるので、たとえば、スプライトには x/y 座標、幅、高さ、速度などがあります。これは、レンダー ループのたびに、使用するソース/ターゲット RectF を決定するときに、これらの整数を float にキャストする必要があることを意味します。物理学とレンダリング、すべてのタイプはすでに同じタイプです...プロパティが不要であっても(「x位置」のフロートは必要ありませんが、レンダリング時にキャストする必要がありますいいえ)。

フロートが一般的に2〜10倍効率が悪い場合(http://developer.android.com/guide/practices/performance.htmlによる)、取るべき適切なコースは何ですか?

TLDL: float が非効率的であっても、int をレンダリング時に float にキャストする必要がありますか? 型キャストはどれほど非効率的ですか?

4

1 に答える 1

5

これを行う最善の方法は、指定された許容範囲内で期待される結果を生成するために必要な最高度の精​​度で計算を行うことです。つまり、double を使用して計算を行い、期待される結果を一貫して得る必要がある場合は、double を使用してください。精度が低くても許容できる場所を見つけ出し、必要な操作のみを float で実行します。覚えておいてください、あなたの世界は落下する物体に対して地球の重力を概算する必要はありません。物事を単純化して、重力を 9.81 ではなく 10 にしたり、ピクセルを偶数の単位に対応させたりすることができます。同じ単位を使用し、計算を行うための単位変換を避ける (これにより余分な操作が発生するため)、cm/s で重力のようなものを持つ最終的な定数を追加することをお勧めします。m/s と km/h は、1 つしかなく、それを何千回も変換するよりも優れています。ああ、int を float にキャストするコストは、2 つの float を乗算するのに比べてそれほど高くないので、それについて考えてみてください。

また、最新の Android フォンでは FPU がますます一般的になっているため、浮動小数点演算を使用する問題は (完全ではありませんが) 少し重要性が低くなってきていることにも注意してください。

もう 1 つ注目したいのは、Double/Float/Integer と double/float/int の違いです。前者は使用するために新しいオブジェクトを作成する必要があり、(可能な限り) 数学に使用すべきではありませんが、後者はプリミティブであり、使用する新しいオブジェクトの作成には至らず、作成コストが低くなります。

于 2012-09-12T16:26:27.047 に答える