a gameには、ユニットを選択するために 'colour picking'というテクニックが使用されています。シャッフルされたリストを保存せずに擬似ランダム順でリストを反復する
これは、すべての可視ユニットに一意の色が与えられていることを意味します。ここ
カラーピッキングのために描かれたシーンの一例である:
一部のユーザーは、16ビットのディスプレイを有することができるように、これらの色が範囲0..64Kであることができます。
ただし、ユニットのインクリメンタルカラーを指定すると、 unit0が0、unitNがNならば、色は人間がデバッグするのが非常に困難です。単位は事実上区別できません。
ユニークで個性的な色を与えたいと考えています。
現在、バイナリツリー(C++ map
)を使用して固定ステップでインクリメントして、使用する色を保存して衝突をチェックしています。これはローエンドのハードウェアでのパフォーマンス上の問題です。これがハッシュテーブルであっても、string
の使用を避けても、ゲームフレーム内の一時的なメモリ割り当ては嫌われます。したがって、コードを最適化するのではなく、履歴を完全に保持しないようにする方法があるかどうかを知りたいと思っています。
64Kの可能な値の大部分が使用されるように、0.64Kを大きなステップでランダムに反復する方法はありますか?衝突を回避するために既に割り当てられた色の履歴を使用しないでください。
(私たちはそのような場合に対処する必要はありません、画面上に複数64K見えユニットがあるようにはほとんどありません!)
値0〜64Kは16ビットの整数を使用して格納できるため、配列と[Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle)を使用する場合は、次のユニットの色には128Kの配列と1つの16ビットのインデックスしか必要ありません。 –
私はこの部分を理解していないと思います。「unit0が0、unitNがNならば、人間がデバッグするのに色が非常に難しく、ユニットのインクリメンタルカラーを与えれば、ユニットは事実上見分けがつきません。あなたは、運動のポイントは、お互いの近くに同様の色を避けることですか? –
[LFSR](http://ja.wikipedia.org/wiki/Linear_feedback_shift_register#Some_polynomials_for_maximal_LFSRs)はいかがですか? – BartoszKP