我正在尝试使用 XNA 中的 spritefont 在屏幕上绘制文本。我可以让文本出现,但无论我尝试什么,当我绘制文本时总会出现其他问题。
我正在尝试显示 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);
}
这是我发现的最接近的工作方式,但由于某种原因,无论我尝试做什么,它都会使线框不起作用,我真的需要线框。
编辑:我在程序运行时调试了填充模式,并且在使用 sprite 字体时由于某种原因它自己将其设置回实体。我可以在绘制顶点之前每帧重置填充模式,但我真的不想这样做。