游戏框架设计问题与适配器模式的应用

之前在业余时间里,尝试拓展一个基于MonoGame的游戏框架,但在实现过程中遇到了一个设计问题。MonoGame中的所有材质渲染都需要通过SpriteBatch类完成。例如,要在屏幕上显示一个图片材质(imageTexture),可以在Game类的子类的Draw方法中使用以下代码进行绘制:

protected override void Draw(GameTime gameTime)
{
    // ...
    spriteBatch.Draw(imageTexture, new Vector2(x, y), Color.White);
    // ...
}

同样,要在屏幕上使用指定的字体显示字符串,可以调用SpriteBatch的DrawString方法来实现:

protected override void Draw(GameTime gameTime)
{
    // ...
    spriteBatch.DrawString(spriteFont, "Hello World", new Vector2(x, y), Color.White);
    // ...
}

此处不必深究spriteBatch对象如何初始化,以及Draw和DrawString方法的具体参数含义。文章讨论范围只关注spriteFont对象。MonoGame使用“内容管道”技术将各种资源(声音、音乐、字体、材质等)编译成xnb文件,并通过ContentManager类将这些资源读入内存,创建相应的对象。其中,SpriteFont是一种资源(字体)对象,在Load方法中可以通过指定xnb文件名的方式从ContentManager获取字体信息:

private SpriteFont? spriteFont;
protected override void LoadContent()
{
    // ...
    spriteFont = Content.Load<SpriteFont>("fonts\\arial"); // Load from fonts\\arial.xnb
    // ...
}

标签:游戏攻略