C# 单局游戏-E2D

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)

几天前,我使用了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)
    {
        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的工作原理。