C# 单局游戏-E2D
几天前,我使用了MonoGame框架。 我要学习以下课程:C# 单局游戏-E2D,c#,dispose,monogame,texture2d,C#,Dispose,Monogame,Texture2d,几天前,我使用了MonoGame框架。 我要学习以下课程: public Texture2D Texture2D { get; set; } public Vector2 Vector2; public Point(Texture2D texture2D, Vector2 vector2) { Texture2D = texture2D; Vector2 = vector2; } public void SetX() { if(Vector2.X > -50)
public Texture2D Texture2D { get; set; }
public Vector2 Vector2;
public Point(Texture2D texture2D, Vector2 vector2)
{
Texture2D = texture2D;
Vector2 = vector2;
}
public void SetX()
{
if(Vector2.X > -50)
{
Vector2.X = Vector2.X-2;
}
}
然后我创建了两个以上的对象并将它们添加到列表中:
_points.Add(new Models.Point(Content.Load<Texture2D>("Point"), new Vector2(50, 50));
\u points.Add(新的Models.Point(Content.Load(“Point”),新的Vector2(50,50));
当我处理其中一个纹理时,所有纹理都将被处理。
如何仅处理这两个对象中的一个?作为一般规则,负责处理某个对象的类应该是创建该对象的同一个类。此规则也有例外,但通常如果该规则成立,则会使此类问题更容易推理 在本例中,您似乎误解了在MonoGame中纹理通常是如何处理的。基本上有两种选择:
content.Load
创建的纹理由内容管理器处理(换句话说,您不应该直接对这些纹理调用Dispose
)new Texture2D
自己创建的纹理由您负责处理(在这种情况下,您应该直接调用dispose
)Content.Load(“Point”)
实际上会返回对同一纹理的引用。这通常被认为是一件好事,因为它只会将纹理加载到内存中一次
如果你真的想让同一个纹理多次加载到内存中,你需要自己处理。虽然你很少想这样做,但一定要先了解它的含义
为了证明这一点,请考虑下面的代码:
var texture1 = Content.Load<Texture2D>("Point"); // load texture into memory
var texture2 = Content.Load<Texture2D>("Point"); // get a reference to the same texture
var texture1=Content.Load(“点”);//将纹理加载到内存中
var texture2=Content.Load(“Point”);//获取对同一纹理的引用
此时texture1
和texture2
将是同一个实例。如果更改其中一个,则同时更改这两个实例
稍后,当您的游戏在
游戏类的深处关闭时,内容管理器将释放。此时纹理将被释放。您无需自己执行此操作。发布您的处置代码(在您调用.Dispose()
或使用块的位置)另外,如果两个点
对象使用相同的纹理2D
,只需加载一次,不要创建单独的实例。处理其中一个实例只会处理该实例。因此,您必须手动将其全部解算。感谢您的帮助。现在我了解了Content Manager的工作原理。