基础 class 加载的内容是否在派生 class 中重复?
Is base class loaded content duplicated in the derived class?
基础 class 加载的内容是否在派生 class 中重复?
我有一个基础 class 'GameScreen' 和许多派生的 classes('TitleScreen'、'PlayerSetupScreen'、'GameplayScreen' 等) .如果我在基础 class 'GameScreen' 中加载图形内容(所有屏幕通用),该内容是否会在每个派生屏幕的 RAM 中复制,还是一次性加载并简单引用?我假设是后者,但我只需要确定一下,因为我打算通过这种方式加载更多内容。任何帮助将不胜感激。
我正在用 C# Monogame 编码,使用 Visual Studio。
如果您发布一些代码显示您所做的事情,您的问题会更清楚,但我想我明白了,所以我会为您做。我假设你有这样的东西:
public abstract class GameScreen
{
protected Texture2D Texture { get; set; }
}
public class TitleScreen : GameScreen
{
}
public class GameplayScreen : GameScreen
{
}
在你代码的其他地方你正在做这样的事情:
var titleScreen = new TitleScreen { Texture = Content.Load<Texture2D>("something") };
var gameplayScreen = new GameplayScreen { Texture = Content.Load<Texture2D>("something") };
简单地说,在此代码中,MonoGame 将只加载一次 "something" 纹理并将其缓存在 ContentManager
中。第二次加载相同内容时,ContentManager
将 return 引用同一内容实例。
这实际上意味着每个 "screen" 将只携带一个指向它关心的内容的引用指针。这不会占用太多内存,所以不用担心。
可能会占用大量 RAM 的是多次调用 Content.Load
以加载 不同 内容。 ContentManager
不会卸载此内容,直到它被显式处置或卸载,即使没有任何内容引用它也是如此。
也就是说,在您的游戏变得更大之前,您不太可能需要担心这些问题。在事情成为真正的问题之前,不要把事情复杂化。如果您开始注意到问题,您以后可以随时重构您的代码。
基础 class 加载的内容是否在派生 class 中重复?
我有一个基础 class 'GameScreen' 和许多派生的 classes('TitleScreen'、'PlayerSetupScreen'、'GameplayScreen' 等) .如果我在基础 class 'GameScreen' 中加载图形内容(所有屏幕通用),该内容是否会在每个派生屏幕的 RAM 中复制,还是一次性加载并简单引用?我假设是后者,但我只需要确定一下,因为我打算通过这种方式加载更多内容。任何帮助将不胜感激。
我正在用 C# Monogame 编码,使用 Visual Studio。
如果您发布一些代码显示您所做的事情,您的问题会更清楚,但我想我明白了,所以我会为您做。我假设你有这样的东西:
public abstract class GameScreen
{
protected Texture2D Texture { get; set; }
}
public class TitleScreen : GameScreen
{
}
public class GameplayScreen : GameScreen
{
}
在你代码的其他地方你正在做这样的事情:
var titleScreen = new TitleScreen { Texture = Content.Load<Texture2D>("something") };
var gameplayScreen = new GameplayScreen { Texture = Content.Load<Texture2D>("something") };
简单地说,在此代码中,MonoGame 将只加载一次 "something" 纹理并将其缓存在 ContentManager
中。第二次加载相同内容时,ContentManager
将 return 引用同一内容实例。
这实际上意味着每个 "screen" 将只携带一个指向它关心的内容的引用指针。这不会占用太多内存,所以不用担心。
可能会占用大量 RAM 的是多次调用 Content.Load
以加载 不同 内容。 ContentManager
不会卸载此内容,直到它被显式处置或卸载,即使没有任何内容引用它也是如此。
也就是说,在您的游戏变得更大之前,您不太可能需要担心这些问题。在事情成为真正的问题之前,不要把事情复杂化。如果您开始注意到问题,您以后可以随时重构您的代码。