XNAでスプライトフォントを使用してテキストを画面に描画しようとしています。 私はテキストを表示することができますが、何を試しても、テキストを描画するときに何か他のものと間違っていることが常にあります。SpriteFontを使用してXNA4でテキストを描画するときの問題
FPSを表示しようとしています。 私はいくつかの異なる方法で、そして私が作った様々なXNAプロジェクトでそれを試しました。 テキストを画面に描画するときに起こることのいくつかは、 - 頂点が遠く離れて間違った場所に描画され、頂点がまったく描画されず、ワイヤフレームモードがオンにならない場合があります。 テキストをどのようにレンダリングしようとしているかによって、私は常にこれらのテキストの1つで終わります。 そして、テキストを描画する部分をコメントアウトすると、すべて正常に戻ります。
ここでのコードの上部にいくつかのコード 私の変数があるさ -
私のLoadContentでGraphicsDeviceManager graphics;
SpriteFont font;
SpriteBatch spriteBatch;
私は
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);
}
これは私が発見した最も近い方法ですが、何らかの理由でそれが私が何をしようとしても、eframeは機能しません。本当にワイヤフレームが必要です。
EDIT: プログラムが実行されるときに塗りつぶしモードをデバッグし、スプライトフォントを使用するときに何らかの理由でそれを元に戻します。 頂点が描画される前にフレームごとに塗りつぶしモードをリセットすることはできますが、実際にはそうする必要はありません。
可能性が非常に高いこのの重複:http://stackoverflow.com/questions/4902494/xna-spritebatch-causing-problems-with-basiceffect –
[OK]をのでspritebatch.Begin()は自動的にいくつかのことを変更します。私はそれがかなりばかだと思うが、私はちょうどフレームごとにそれらをリセットする必要があると思います... – Frobot
SpriteBatch.Beginではなく、DrawStringはダムではありません。あなたは本当に描画する前に必要な状態を設定する必要があります、これらの種類のものは問題ではありません。 Shawn Hargreavesの次のブログを参照してください。http://blogs.msdn.com/b/shawnhar/archive/2006/11/13/spritebatch-and-renderstates.aspx ShawnのXNAブログ記事をすべて読んでください。 –