Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用texture2d变量初始化非静态类_C#_Constructor_Initialization_Xna 4.0_Texture2d - Fatal编程技术网

C# 使用texture2d变量初始化非静态类

C# 使用texture2d变量初始化非静态类,c#,constructor,initialization,xna-4.0,texture2d,C#,Constructor,Initialization,Xna 4.0,Texture2d,我正在学习XNA(以及C#的一般用法),在尝试编写自己的小侧卷轴进行学习时,我偶然发现了以下问题 该级别是从平铺构建的,由于我不想在每次实例化时将纹理传递给平铺(如返回新平铺(positionVector2,texture)),因此默认情况下应使用该纹理构建类 现在我就是无法让它工作,我尝试像这样使用构造函数: public Tile(Vector2 position) { this.texture = Platformer03.Texture; } class Platformer

我正在学习XNA(以及C#的一般用法),在尝试编写自己的小侧卷轴进行学习时,我偶然发现了以下问题

该级别是从平铺构建的,由于我不想在每次实例化时将纹理传递给平铺(如
返回新平铺(positionVector2,texture)
),因此默认情况下应使用该纹理构建类

现在我就是无法让它工作,我尝试像这样使用构造函数:

public Tile(Vector2 position)
{
   this.texture = Platformer03.Texture;  
}
class Platformer03
{
    public static Texture2D Texture = ... ;
}
class Tile
{
    public Tile(Vector2 position)
    {
        this.texture = Platformer03.Texture;
    }
}
其中
Platformer03
是游戏类,纹理是加载的瓷砖纹理的属性。 既然
Platformer03
是类而不是实例(它不是静态的),这显然不起作用,但我甚至找不到
Platformer03
的实例(它被称为game1,但超出了范围)

所以我肯定我做的都是错的,但是我怎样才能让Tile类在每个实例化上使用特定的texture2d呢


请温柔一点,尽管你可能无法想象一个更愚蠢的问题,但我可以向你保证,在过去的几个小时里,我已经像疯子一样搜索和阅读了。如果你将
Platformer03
下的
纹理
变量变成
静态
变量,然后就可以访问它,而不需要
Platformer03
类本身的实例(前提是它没有标记为private或protected)


如果您找不到
Platformer03
类,可能您没有查找正确的命名空间?

我不确定是否理解您的问题,但是如果在
Platformer03
构造函数中您已经加载了所需的纹理,您可以实例化一个新的
Platformer03
并获取它。 像这样:

public Tile(Vector2 position)
{
    Texture = new Platformer03().Texture;
}
或者,如果在
Plataformer03
中,对于
Platformer03
的所有不同对象,在
Texture
中仅使用一个值,则可以在非静态类中使用静态成员,如下所示:

public Tile(Vector2 position)
{
   this.texture = Platformer03.Texture;  
}
class Platformer03
{
    public static Texture2D Texture = ... ;
}
class Tile
{
    public Tile(Vector2 position)
    {
        this.texture = Platformer03.Texture;
    }
}

对不起,我的英语不好。

嘿,让texture2d变量及其属性保持静态确实有效,非常感谢!关于Platformer03类:我找到了这个类,但它不是静态的。因此,我想找到这个类的实例,称为“game”。程序.cs的主要方法如下:
使用(Platformer03 game=new Platformer03()){game.Run();}
现在根据MSDN,使用“定义一个作用域,在该作用域之外将处理一个或多个对象”。这就是为什么我不能在其他类中“看到”Platformer03的“游戏”实例的原因吗?(命名空间在任何地方都是相同的)如果是这样,我可以更改使用吗?类本身不应该是静态的,而应该是变量。然后,您可以在不知道类的实例的情况下访问静态变量(因为它是静态的,意味着它在类的所有实例之间共享)。如果你传递一个对象的实例(在本例中是你的
游戏
变量),你只能“看到”它。到目前为止,我只在静态类中使用静态变量,感谢你拓宽了我的视野(如果这是一个短语的话)!!:D现在一切都好了,再次谢谢!是的,我也想到了第一个,但是因为“platformer03”是游戏,基本上,我不想要第二个(现在),我想创建一个全新的游戏实例来“释放”纹理不是一个干净的解决方案。你的第二个建议是我现在选择的,据我所知,这是威廉·邓肯的建议,对吗?最后一个问题,与我的主要问题完全无关:你使用“this.texture”,虽然我理解你为什么使用它,但它有必要吗?关于你的英语:我也是“外国人”,所以不用担心!只要我们彼此理解,一切都是好的。我们通常使用
this
来表示类的当前对象(更重要的是要保持代码清晰、美观,并且对于具有相同名称的两个变量没有问题,因为您可以为类创建一个
纹理
,为方法创建另一个,在这种情况下,要调用类的
纹理
,您将需要
this