私はC#2010とXNA 4.0を使ってゲームを書いています。私はそれが良いゲームであり、いくつかの「ちょっとしたこと」ではないので、私の目標の1つは良いフレームレートです。これについては、XNA関連またはC#関連のアドバイスをお願いしたいと思います。コードをスピードアップしてFPSを改善するにはどうすればよいですか?ここでXNAゲームのパフォーマンス
は、私が見つけたいくつかのものです:
- (C#の)
list<>
のarray
instedを使用すると、パフォーマンスに多くを改善します、場合にあなたは膨大なデータ量(あるいはたくさんアクセスしたい:アレイを有します20000項目の20000 - のリストのほぼ180%FPS(C#の)
for
代わりのforeach
を使用すると、それは、5〜10%の違いのようなものだと同じ20000個の要素のパフォーマンスを。改善されますを与えた。 - (XNAとC#)メソッドを呼び出しますパフォーマンスが悪いので、自分のコードをmethに散布したときodsは他のメソッドなどと呼ばれていましたが、すべてがとてもクールでオブジェクト指向でしたが、1回の呼び出しごとに1〜3FPSのコストでした。
- (xna)updateとdraw:コードをupdate()とdraw()に入れたときのパフォーマンスの違いはありませんでしたので、update()の下にいくつかのメソッドを置く必要はありませんよりよいFPSを期待して、すべてを一緒にdraw()に保つのではなく、
- (xna)それは私かちょうど4.0かどうかわかりませんが、たくさんのテクスチャとかなり複雑なメッシュを含む.Xをロードすると、読み込むのに多くの時間がかかります。以前のものと同じテクスチャを持っているかどうかにかかわらず、XNAが各三角形のテクスチャをロードし始めたので、自分自身の.Xローダとメッシュ/モデルレンダラを作成しなければなりませんでした。あなたのためにテクスチャをキャッシュする自分のコンテンツローダを書くことさえ、解決策ではありません。何度も利用されているからです。ふわふわとしたものを作るなら、
drawuserprimitives
を使って、Model
クラスを使わないことをお勧めします。 (4.0のみかどうかは分かりませんが、3.1でもこのようなパフォーマンスの問題がありました) - (xnaとc#)描画については、 "new"を使わないでください。私はウェブ上でいくつかのコードを見て、コピー/ペーストされたものは "basicEffect = new BasicEffect(graphicsDevice);"ドロー()のような醜さ、さらに悪いことに:ドロー()内の反復で。このようにすればパフォーマンスは低下します。代わりに、 "ゲーム"や静的なクラスでそのようなクラスを1つ持っています。これは他の「一時オブジェクト」にも当てはまりますが、醜いですが、グローバルなものを作成し、それを注意して使用してガーベッジコレクタのためにゲームを作るようなコードを作成する方が良いと思います。
ので、長い話を短くするには、[OK]を、ここでいくつかの良いアドバイスを投稿してくださいので、I /我々は、良い迅速かつ最適化されたゲームを作ることができます;)事前に
ありがとう: Zéiksz
良いCW候補のようです:) – BlackBear
これをコミュニティウィキにすることをお勧めします。 – Ben
私は固体OOPアーキテクチャを使用してそれを購入することはありません毎回1〜3 fpsのコストを呼び出す... – Blindy