如何将SpriteFont导入MonoGame

时间:2012-06-18 09:05:53

标签: android xamarin.android android-assets monogame spritefont

我正在使用Mono For Android和MonoGame将简单的类似俄罗斯方块的XNA应用移植到Android上;我已按照this link中建议的步骤进行操作,到目前为止,所有内容编译良好,并且没有相关的警告。但是,在加载内容时,null参数异常会在程序中的以下位置中断程序:

protected override void LoadContent() {
    // ...
    _font = Content.Load<Microsoft.Xna.Framework.Graphics.SpriteFont>("SpriteFont1");
    // ... 
}

内容根目录在游戏构造函数类中设置:

public Game2 (){
Content.RootDirectory = "Content";
Content.RootDirectory = "Assets/Content"; // TEST.
//...}

我尝试了几种组合,但都无济于事。

我还尝试在Build Action属性中将xnb文件设置为Content以及Android Assets;具有链接,复制始终,仅在较新...等时复制。

无论哪种方式,我的问题是我不明白为什么 HOW 我应该这样做。我对平台和XNA都很陌生,所以这可能是一个新手问题,但事实是经过几个小时敲打我的头和拳头对着显示器/键盘我觉得卡住了,需要你的帮助。 / p>

2 个答案:

答案 0 :(得分:0)

MonoGame(2.5.1)在ContentManager.Load中为SpriteFont类型抛出NotImplementedException。有同样没有解决的问题。我试图不使用DrawString。

为了在Win32应用程序中加载纹理,我使用:

Content.RootDirectory = @"../../Content";
var sampleTexture = Content.Load<Texture2D>("Sample.png");

您甚至不能将其添加到解决方案中。

对于Andoind(MonoDroid)应用程序,您必须添加&#34; Content&#34;文件夹到您的解决方案并设置&#34; Andtoid Asset&#34; in&#34; Sample.png&#34;属性。

Content.RootDirectory = "Content";
var sampleTexture = Content.Load<Texture2D>("Sample.png");

另见:

http://monogame.codeplex.com/discussions/360468

http://monogame.codeplex.com/discussions/267900

答案 1 :(得分:0)

我有一个library支持MonoGame上的可变宽度字体(由BMFont生成)。不幸的是它是一个渲染器,所以还有其他代码。但是,基本思路很简单。您可以查看此处的loader和网格构建器(给定字符串)here。此构建器支持跨多个页面传播字符的字体。

希望这有帮助!