Получение ширины экрана от другого класса - PullRequest
0 голосов
/ 20 августа 2011

У меня есть класс GameObject (я сделал сам), и я хотел создать (например) переменную GraphicsWidth, которая содержит максимальную ширину экрана. Это означает, что мне нужно создать экземпляр GraphicsDeviceManager. (право?). Вот что я сделал:

protected GraphicsDeviceManager GM;

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

И это говорит о том, что мне нужно использовать «новый» (инициализировать объект). Как я могу сделать это из моего класса GameObject?

Редактировать: Пожалуйста, кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Причина вашей ошибки в том, что вы объявили переменную для хранения 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; }
    }
}

Так что это похоже на решение Итамара.

0 голосов
/ 20 августа 2011

Не понимаю, зачем вам создавать еще один GraphicsDeviceManager внутри каждого экземпляра GameObject.Все, что вам нужно сделать, это вызвать функцию GraphicsDeviceManager.PreferredBackBufferWidth().Если вам нужен доступ к нему из GameObject, вы можете объявить статический GraphicsDeviceManager.Я обычно так и делаю.

Возможно, я неправильно понял ваш вопрос.Если да, уточните, чего вы пытаетесь достичь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...