从另一个类获取屏幕宽度

时间:2011-08-19 22:14:03

标签: c# xna

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

protected GraphicsDeviceManager GM;

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

它说我需要使用“new”(初始化对象)。我怎么能从我的GameObject类中做到这一点?

编辑:拜托,有人可以尝试帮忙吗?

2 个答案:

答案 0 :(得分:1)

您的错误原因是您声明了一个变量来保存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的解决方案类似。

答案 1 :(得分:0)

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

也许我误解了你的问题。如果是这样,请澄清你想要完成的任务。