使用Graphics.DrawString
将一组(相当静态的)文本渲染到屏幕外位图,将其转换为Texture2D
一次,然后简单地调用SpriteBatch.Draw
,而不是使用内容管道并使用渲染文本,是否有任何缺点SpriteFont
?这基本上是一页文本,绘制成"纸张",但用户也可以选择调整字体大小,这意味着我必须包含不同大小的spritefonts.
由于这是一个仅限Windows的应用程序(不打算移植它),我可以访问所有字体,例如普通的WinForms应用程序,我相信使用Graphics.DrawString
(甚至TextRenderer
)使用精灵字体时渲染质量会好得多.
此外,似乎性能可能更好,因为SpriteBatch.DrawString
需要在每次迭代中"渲染"整个文本(即分别为每个字母发送顶点),而使用位图我只做一次,所以它应该稍微减少工作量CPU方面.
[更新]
从技术方面来看,它似乎比通过精灵字体更好地完成文本渲染.如果它们是水平渲染的,我甚至会得到ClearType.可能存在的一个问题是字体的spritesheets(可能是?)在纹理内存方面比为文本页面创建单独的纹理更有效.
我有一个非常奇怪的问题,我试图在屏幕上打印一个简单的spritefont,但精灵变得非常模糊......
我已经使用内容管道从VS 2010加载spritefont以形成xnb文件,然后在monogame下将其加载到VS2012
public void DrawText(int x, int y, string s)
{
_color = Color.White;
_rotation = 0.0f;
_size = 1.0f;
_spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
_spriteBatch.DrawString(_spriteFont, s, new Vector2(x, y), _color, _rotation, new Vector2(), _size, SpriteEffects.None, 1.0f);
_spriteBatch.End();
}
Run Code Online (Sandbox Code Playgroud)
仍然图像变得非常模糊..我不知道为什么......
我在谈论这样的事情
有谁知道为什么会这样?我已经搜索了所有内容,我得到的最接近的答案是,如果精灵或spritefont位置是一个浮点数(非精确整数),结果将被全局化......但这不是这里的情况
干杯!
我上传的XNB精灵字体 https://skydrive.live.com/redir?resid=50E25A0EEED51C3C!241&authkey=!AAvw-i5OtipT8fo 如果有人有兴趣尝试此
XNA有Spritefont类,它有一个MeasureString方法,可以返回a的宽度和高度string
.我试图了解如何创建一个方法,该方法将有效地返回Environment.Newline
插入在正确位置的字符串,以便如果适合某个宽度和高度(Rectangle用作参数).
我想通过使用方法在XNA中绘制特殊字符,如:"π,Ω,θ,ξ"
SpriteBatch.DrawString()
,但我得到一个例外,说这些字符在SpriteFont文件中不可用.这有什么解决方案吗?
所以最近我在我的电脑上安装了一个新字体(.ttf),以便我可以在我的XNA游戏中使用它.这是正确的字体类型,我拼写正确,但XNA找不到它.关于可能导致这种情况的任何想法?
这是错误:无法找到字体系列"Bloody".请确保安装了所请求的字体,并且是TrueType或OpenType字体.
但是这个字体安装正确,拼写正确,并且是TrueType字体.
我正试图在Monogame程序中绘制文本.我想使用SpriteFont来执行此操作,但在尝试加载SpriteFont时出现以下错误.
//Here I try to load the SpriteFont
//It is kept in the "Content/fonts" folder, with "Content" as the Content.RootDirectory
Font = Content.Load<SpriteFont>("fonts/SpriteFont1");
//I then get this error
An unhandled exception of type 'System.NotImplementedException' occurred in MonoGame.Framework.dll
Additional information: The method or operation is not implemented.
Run Code Online (Sandbox Code Playgroud)
SpriteFont1构建操作设置为"内容",复制到输出目录为"始终复制".SpriteFont1.xnb文件位于Content文件夹中,具有相同的设置.如何修复错误以便我可以加载SpriteFont?
DirectX::SpriteFont
我在使用/时遇到问题DirectX::SpriteBatch
(来自 DirectXTK;与此处讨论的问题完全相同:Problems while Drawing text using the SpriteFont class)。
void DrawScene(void)
{
HRESULT hr;
float bgColor_a[4] = { 0.0f, 0.4f, 0.8f, 0.0f };
g_pDeviceContext->ClearRenderTargetView(g_pRenderTargetView, bgColor_a);
g_pDeviceContext->ClearDepthStencilView(g_pDepthStencilView, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
XMMATRIX cameraProj = XMLoadFloat4x4(&g_camera._cameraProjection);
XMVECTOR pos = XMLoadFloat3(&g_camera._pos);
XMVECTOR target = XMLoadFloat3(&g_camera._target);
XMVECTOR up = XMLoadFloat3(&g_camera._up);
XMMATRIX cameraView = XMMatrixLookAtLH(pos, target, up);
XMMATRIX worldBox2 = XMMatrixIdentity() * (XMMatrixTranslation(2.0f, 0.0f, 0.0f) * XMMatrixRotationY(XMConvertToRadians(g_rotBox2)));
XMMATRIX wvp = worldBox2 * cameraView * cameraProj;
XMMATRIX transposeWvp = XMMatrixTranspose(wvp); …
Run Code Online (Sandbox Code Playgroud) spritefont ×7
c# ×5
monogame ×3
xna ×3
xna-4.0 ×2
3d ×1
c#-4.0 ×1
c++ ×1
directx-11 ×1
drawstring ×1
fonts ×1
spritebatch ×1
word-wrap ×1