我正在用C#和XNA 4.0制作一个游戏,我的一个类需要自己的纹理。该课程目前正在使用:
类构造函数:
class Item : ItemBase //It uses a base class
{
public Item(Texture2D myTexture) : base(myTexure)
{
}
}
新实例:
Texture2D m_Texture = Content.Load<Texture2D>("Texture1");
Item m_item = new Item(m_Texture);
但是,该类的每个新实例都需要相同的纹理(即每个参数值都完全相同)。结果,该参数感觉不必要。我正在考虑将构造函数更改为更像:
public Item() : base(MainClass.m_Texture) //This now takes a public static variable from the main game class
{
}
这消除了对参数的需求(我的编码较少),但我想知道这是否会导致性能和内存使用等其他问题。
总的来说,这被认为是更好的编程实践?有几个类实例都使用相同的参数值或交换静态变量的构造函数参数?
答案 0 :(得分:1)
你可以使纹理成为单一的。
class TextureHolder
{
static private TextureHolder instance;
private Texture2D texture;
private TextureHolder()
{
texture = Content.Load<Texture2D>("Texture1");
}
public static GetTexture()
{
if(instance==null)
{
instance = new TextureHolder();
}
return instance;
}
}
你班上的然后这样做:
public Item() : base(TextureHolder.GetTexture()) //This now takes a public static variable from the main game class {}
这样,如果没有创建Items,则永远不会加载纹理。但是如果创建的项目超过2个,则只加载一次纹理并引用一次
答案 1 :(得分:0)
对于性能,最好有一个静态变量并在您的类之间共享。但通常情况下,性能影响几乎为零,除非它是关键代码。 (关键代码,我指的是在一秒钟内运行很多次的代码,例如 Update 方法,或导致应用程序出现瓶颈的代码)
否则,我建议您在代码中使用感觉自然的内容。如果所有实例始终共享相同的纹理,那么为此使用一个变量是自然的,而不是多次复制。