MonoGame添加纹理

时间:2018-05-11 19:43:00

标签: textures monogame

我正在用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 = ???;
    }

1 个答案:

答案 0 :(得分:3)

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

比方说,您可以使用LoadContent类的Game方法创建新的怪物。

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分离。另一方面,有些人更喜欢第二种方法,因为他们可以在类本身内部定义“数据”。这真的是一个设计选择,你必须自己做。

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

有人可能会提出单件服务定位器属性注入,这些也是有效的选项,但是如果你这些模式要小心不理解他们。他们有时会觉得感觉就像更好的选择,但他们也会带来一些前面不明显的重大缺点。

我知道你还是C#的新手,我在这里提出了一些相当高级的话题。如果你不知道它们是什么,你可以随时谷歌我提到的条款。老实说,不要太担心。只需选择一些东西就可以了。这是最好的学习方式。