【问题标题】:Is it possible on monogame to load content files to the Content Manager at run time?monogame 是否可以在运行时将内容文件加载到内容管理器?
【发布时间】:2021-04-20 13:11:58
【问题描述】:

我想这样做的原因是我希望用户能够创建自己的赛道并将其保存为图像。然后,用户将能够选择他们的图像并在他们的赛道上比赛。

我正在考虑使用下面的代码来测试文件是否存在

using System.IO;

public static bool TrackExists(string fileName)
    {
        return File.Exists($@"Content\Tracks\{fileName}.xnb");
    }

如果它不存在于管道中,我希望添加并构建它,以便在项目中使用它。

我该怎么做呢?

        if (File.Exists(path))
        {
            tex.FromFile(_graphicsDevice, path);   
       
            _game.ChangeState(new RaceState(_game, _graphicsDevice, _content, tex));
        }

【问题讨论】:

  • 你想要的外部文件...是图像(Texture2D)吗?
  • 我建议您不要允许最终用户在内容管道中添加/编辑文件。无论您的文件类型是什么,您都需要在不使用内容管道的情况下打开它。您的文件可能需要更长的时间才能加载,但这是您应该这样做的唯一方法。
  • @AzuxirenLeadGuy 是的
  • @AzuxirenLeadGuy,请问怎么来的?我正计划有一种方法来验证已制作的图像,这样它就不会破坏任何东西

标签: monogame


【解决方案1】:

如果需要将图片文件加载为Texture2D,则需要使用静态方法Texture2D.FromFile()如下

myTex2D = Texture2D.FromFile(GraphicsDevice, "path/to/file");

根据经验,您不能使用管道动态加载文件。不过,您不必使用它。 AFAIK 管道是加载游戏静态内容的最佳和最快方式。将有一些方法可以动态地将您的自定义文件作为内容导入,所以不要因为您没有使用管道而担心。 Monogame 中有许多类型(如 Texture2D)支持从文件动态加载。

编辑: 澄清一下,该方法是 Texture2D 类的 static 成员,因此您应该按如下方式使用它:

    if (File.Exists(path))
    {
        tex = Texture2D.FromFile(_graphicsDevice, path);
        //...Rest of your code
    }   

【讨论】:

  • @DanCook 很高兴为您提供帮助。请考虑接受答案。
  • 我正在尝试找到该方法,但在我键入时它没有出现。你有什么建议吗?
  • 我已经编辑了帖子以显示我添加的代码,VS 说 Rexture2D 不包含 FromFile() 的定义
  • @DanCook 我编辑了我的答案。现在应该很清楚了。该方法需要通过Texture2D 调用,因为它是静态的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多