如何在类之间共享数据?

时间:2013-01-05 23:26:01

标签: c# textures data-sharing

我想创建一个定义游戏关卡的类。它必须能够访问主游戏类使用的数据(纹理)。我该怎么办?

namespace xnagame
{

class Level
{
  blockTexture1, blockTexture2;
  Content.RootDirectory = "Content"; 
   void LoadTextures()
    { 
      blockTexture1 = Content.Load<Texture2D>("textures/block1");
      blockTexture2 = Content.Load<Texture2D>("textures/block2");
    }
}

下面是我项目的图片。我需要从“Level”类访问存储在“xnagameContent / textures”中的数据http://cs403723.userapi.com/v403723602/5635/Pq5jGApDYCU.jpg

3 个答案:

答案 0 :(得分:1)

听起来像dependency injection的理想情况。您可以在构造函数中传入对Content类的引用,或者将其作为公共属性,例如。

public class Level
{
    public Level(Content content)
    {
        Content = content;
    }

    public Content Content { get; set; }
}

答案 1 :(得分:0)

试试这个......

主要方法:

Level level = new xnagame.Level(this.Content);
level.LoadTextures();

自定义级别类:

namespace xnagame
{
    public class Level
    {
        public Texture2D blockTexture1, 
        public Texture2D blockTexture2;
        public ContentManager content;

        public Level(ContentManager content)
        {
            this.content = content;
        }

        public void LoadTextures()
        {
            this.blockTexture1 = this.content.Load<Texture2D>("textures/block1");
            this.blockTexture2 = this.content.Load<Texture2D>("textures/block2");
        }
    }
}

答案 2 :(得分:0)

我不是xna专家,但我认为如果从Game派生你的类,Xna ContentManager对象是可用的。内容是Game类的属性。见http://msdn.microsoft.com/en-us/library/bb203875.aspx

如果要分离加载代码并将其放入Level类,则可以传递使用主游戏类的Content属性获取的ContentManager实例。