C# 使用texture2d变量初始化非静态类
我正在学习XNA(以及C#的一般用法),在尝试编写自己的小侧卷轴进行学习时,我偶然发现了以下问题 该级别是从平铺构建的,由于我不想在每次实例化时将纹理传递给平铺(如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
返回新平铺(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
)