【问题标题】:MonoGame Adding textureMonoGame 添加纹理
【发布时间】:2018-05-14 12:58:06
【问题描述】:

我正在使用 MonoGame 学习 c#。 如何在此类中加载纹理?我不能使用 this.Content.Load("texture");

public class Mob1
{
    Texture2D texture;
    public float X;
    public float Y;

    public Mob1(float x, float y, Texture2D texture)
    {
        this.X = x;
        this.Y = y;
        this.texture = texture;
    } 

    public Mob1()
    {
        this.X = 50;
        this.Y = 50;
        this.texture = ???;
    }

【问题讨论】:

    标签: textures monogame


    【解决方案1】:

    您需要考虑调用Mob1 类的构造函数的代码。你要打到哪里去new Mob1()

    假设您在 Game 类的 LoadContent 方法中创建了新的生物。

    public void LoadContent()
    {
        var mob = new Mob1();
    }
    

    此时您有几个选择。

    您可以使用第一个构造函数并将纹理与 X 和 Y 值一起传递:

    var texture = Content.Load<Texture2D>("mob1");
    var mob = new Mob1(15, 15, texture);
    

    或者您可以更改第二个构造函数以将ContentManager 作为参数:

    public Mob1(ContentManager content)
    {
        this.X = 50;
        this.Y = 50;
        this.texture = content.Load<Texture2D>("mob1");
    }
    

    那么您在LoadContent 中的调用变为:

    var mob = new Mob1(Content);
    

    就个人而言,我更喜欢第一个构造函数,因为它正确地将Mob1 类与ContentManager 解耦。另一方面,有些人更喜欢第二种方法,因为他们可以在类本身内部定义“数据”。这真的是一个设计选择,你必须自己做。

    关键是,您需要以某种方式将纹理传递给类。这些不是你唯一的选择,但它们最不可能让你以后陷入麻烦。

    有人可能会提出 singletonsservice locatorsproperty injection,这也是这里的有效选项,但如果你使用这些模式,请小心不明白他们。它们有时感觉是更好的选择,但它们也有一些明显的缺点,而这些缺点在前面并不明显。

    我知道您还是 C# 的新手,我在这里提出了一些相当高级的主题。如果您不知道它们是什么,您可以随时搜索我提到的术语。不过老实说,不要太担心。只需选择一些东西并随它去。这是最好的学习方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 2016-06-02
      相关资源
      最近更新 更多