XNA でスプライトフォントを使用して画面にテキストを描画しようとしています。テキストを表示することはできますが、何をしようとしても、テキストを描画するときに何か他のことがうまくいかないことが常にあります。
FPSを表示しようとしています。私はいくつかの異なる方法で、そして私が作成したさまざまな XNA プロジェクトでそれを試しました。画面にテキストを描画するときに発生する問題には、頂点が遠く離れて間違った場所に描画される、頂点がまったく描画されない、ワイヤー フレーム モードをオンにできないなどがあります。テキストをどのようにレンダリングしようとするかに応じて、常にこれらのいずれかになります。そして、テキストを描画する部分をコメントアウトすると、すべて正常に戻ります。
ここにいくつかのコードがあります コードの上部にある私の変数は -
GraphicsDeviceManager graphics;
SpriteFont font;
SpriteBatch spriteBatch;
私の LoadContent には
font = Content.Load<SpriteFont>("SpriteFont1");
RasterizerState rs = new RasterizerState();
rs.FillMode = FillMode.WireFrame;
GraphicsDevice.RasterizerState = rs;
spriteBatch = new SpriteBatch(GraphicsDevice);
そして、ここに私の Draw メソッド全体があります-
protected override void Draw(GameTime gameTime)
{
CreateMesh();
GraphicsDevice.Clear(Color.SkyBlue);
effect.Parameters["View"].SetValue(cam.viewMatrix);
effect.Parameters["Projection"].SetValue(projectionMatrix);
effect.CurrentTechnique = effect.Techniques["Technique1"];
effect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, vertices.Count, 0, indices.Length / 3);
spriteBatch.Begin();
spriteBatch.DrawString(font, frameRate.ToString(), new Vector2(1, 1), Color.Black);
spriteBatch.End();
frameCounter++;
base.Draw(gameTime);
}
これは私が見つけた作業に最も近い方法ですが、何らかの理由で、何をしようとしてもワイヤーフレームが機能せず、ワイヤーフレームが本当に必要です。
編集:プログラムの実行時に塗りつぶしモードをデバッグし、スプライト フォントを使用すると、何らかの理由で塗りつぶしモードに戻ります。頂点が描画される前にフレームごとに塗りつぶしモードをリセットできますが、実際にはそうする必要はありません。