我正在用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 = ???;
}
答案 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#的新手,我在这里提出了一些相当高级的话题。如果你不知道它们是什么,你可以随时谷歌我提到的条款。老实说,不要太担心。只需选择一些东西就可以了。这是最好的学习方式。