从另一个类获取屏幕宽度

本文关键字:取屏幕宽度 另一个 | 更新日期: 2023-09-27 18:06:23

我有一个GameObject类(我自己做的),我想创建(例如)一个包含屏幕最大宽度的GraphicsWidth变量。这意味着我需要创建一个GraphicsDeviceManager实例。(对吗?)。我是这样做的:

protected GraphicsDeviceManager GM;
public int GraphicsWidth
{
    get
    {
        return GM.GraphicsDevice.Viewport.TitleSafeArea.Width;
    }
}

它说我需要使用"new"(初始化对象)。我如何从GameObject类中做到这一点?

编辑:拜托,有人能试着帮忙吗?

从另一个类获取屏幕宽度

错误的原因是您已经声明了一个变量来保存GraphicsDeviceManager,但是您还没有初始化它。您需要新建变量:

protected GraphicsDeviceManager GM = new GraphicsDeviceManager();

或者您需要将GraphicsDeviceManager.GraphicsDevice声明为静态并进行如下更改:

return GraphicsDeviceManager.GraphicsDevice.Viewport.TitleSafeArea.Width;

正如上面的注释所指出的,您有相当多的选择。在不了解更多上下文的情况下,我宁愿为GraphicsDeviceManager的单个实例使用单个静态容器,而不使GraphicsDeviceManager静态。这样的

public static class MyGraphics{
    public static readonly GraphicsDeviceManager DeviceManager = new GraphicsDeviceManager();
    public int ScreenWidth{
        get{ return DeviceManager.Viewport.TitleSafeArea.Width; }
    }
}

这和Itamar的解决方案很相似

我不明白为什么你要在每个GameObject实例中创建另一个GraphicsDeviceManager。您需要做的就是调用GraphicsDeviceManager.PreferredBackBufferWidth()函数。如果你需要从GameObject访问它,你可以声明一个静态GraphicsDeviceManager。那是我通常做的。

也许我误解了你的问题。如果是,请说明你想要达到的目的。