スネークの動きがグリッドベースではなくフリーフォームで、後続のセグメントをどのように取得するかという問題を抱えているスネークゲームを作成しようとしています。頭に従ってください。スネークゲーム(グリッドベースではない)
最も簡単な解決策は、テールからヘッドにループして、電流の位置を次のセグメントの位置、つまりsegment[i].position = segment[i - 1].position
に設定することです。これは素晴らしいですが、すべてのセグメントが1ピクセルだけ離れて集まってしまいます。それほど魅力的ではありません。
これを打ち破るために、私は最後の15ポジションの配列を作成し、最新のポジションを最後までプッシュします。それから、フレームごとに、配列の最初の要素がポップアップされ、それを使って、snapshot
のセグメントが15フレーム前の位置にあります。これは完璧に機能しますが、常にnew()
と呼び出して配列をシャッフルすることで、パフォーマンスが大幅に低下します。フラッシュのガベージコレクターは私に地獄を与えています。
誰も他の解決策を考えることはできますか?
私はFlash上で作業していますが、解決策は実際にはどの言語にも基づいているとは思いません。
ありがとうございます!
私は彼がキューを必要としていると思うでしょう。両端キューにキューを追加するだけで、キューからキューを削除する必要があるからです。リングバッファーの実装は、 "配列をシャッフルする"ことが本当にボトルネックであるかどうかのように聞こえる。 –
@Laurence:後者の多くは配列シャッフルに依存しているので、deque実装はこれに対してキュー実装よりも最適化されている傾向にあることがわかりました。 –
私はこのリングバッファが私が必要とするものだと思います。 Wikipediaのページによれば、「循環バッファリングは最大サイズが固定されたキューの実装方法を改善します」と私は常に最後の15のポジションを持っています。 – Scott