我正在尝试为我的游戏创建一个模块,其想法是能够在我的所有游戏中使用它。
因此,我的lib项目拥有自己的内容文件夹,而且一切都很好,但是随着宿主项目的内容文件夹而崩溃。
这是我的组件(我引用它是指向主机项目(电话应用)的链接是它自己的项目):
namespace FPSComponent
{
public class FPS : DrawableGameComponent
{
private SpriteBatch spriteBatch;
SpriteFont normal;
Texture2D headerBackground;
public FPS(Game game)
: base(game)
{
spriteBatch = new SpriteBatch(Game.GraphicsDevice);
string tempRootDirectory = Game.Content.RootDirectory;
Game.Content.RootDirectory = "FPSComponentContent";
headerBackground = Game.Content.Load<Texture2D>("header-background");
normal = Game.Content.Load<SpriteFont>("normal");
//Game.Content.RootDirectory = tempRootDirectory; <-- does not work
}
public override void Update(GameTime gameTime)
{
// TODO: Add your update logic here
base.Update(gameTime);
}
public override void Draw(GameTime gameTime)
{
//GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(headerBackground, Vector2.Zero, Color.White);
spriteBatch.DrawString(normal, "FPS COMPONENT", new Vector2(20, 20), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
}
}
我试图在哪里做的是创建一个独立的组件以导入到我的项目中,这主要是出于学习目的……而不是有效的FPS示例atm :-)
最佳答案
我认为您必须阅读这篇文章Content Pipeline MSDN
关键是,当您在Visual Studio中按F5键时,它将编译您的项目和资产。
通过使用Game.Content.Load<Texture2D>
XNA将尝试找出.xnb
当Visual Studio编译您的项目时,他会将您的.xnb创建到特定的forlder中。
您并没有真正将.png或.jpg文件直接加载到游戏中:)
您必须首先将新资产编译成.xnb文件(有点序列化过程)
这是一个类似的问题https://gamedev.stackexchange.com/