Получение ширины / высоты экрана не в основном классе (XNA) - PullRequest
0 голосов
/ 06 августа 2011

Хорошо, поэтому я в основном пытаюсь сделать ландшафт, например, прямое поле или что-то в этом роде.Поэтому мне понадобится ширина экрана для ширины текстуры.Я пытался сделать это так:

int TextureHeight = graphics.PrefferedBackBufferWidth;

Точно так же, как я делал в классе game1.cs, но это не позволяет мне использовать свойство "graphics".Я также попытался сделать это: GraphicsDevice.Viewport.TitleSafeArea.X Так что я не знаю, что делать, может быть, есть другой способ нарисовать эту текстуру по всей ширине экрана?Кстати, в чем разница между этими двумя графическими методами, которые я упоминал?

Спасибо за помощников.

Ответы [ 2 ]

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

Вам нужен graphicsDevice, но он может быть очень грязным для создания множества устройств GraphicsDevices и других вещей.Так что действительно простой способ передать значение всего, что вы хотите (например, ширину экрана) в вашей игре, - это создать «GlobalVariable», который вы можете использовать в ЛЮБОМ классе, который вы хотите.Вот как выполнить этот простой трюк.

Сначала создайте новый класс и назовите его GlobalClass. Вот так:

class GlobalClass
{
}

Теперь добавьте закрытую переменную с открытым способом доступа к ней.Здесь я создаю две переменные, одну для высоты экрана, а другую для ширины.

class GlobalClass
{
    private static float screenWidth;
    private static float screenHeight;

    public static float ScreenWidth
    {
        get { return screenWidth; }
        set { screenWidth = value; }
    }

    public static float ScreenHeight
    {
        get { return screenHeight; }
        set { screenHeight = value; }
    }
}

И все готово!С помощью этого класса вы можете передать эти две переменные в любом месте вокруг вашей игры.Итак, вернитесь к своему основному классу (game1.cs) и в обновленном методе обновите значение этих переменных с помощью высоты экрана и ширины экрана следующим образом:

GlobalClass.ScreenWidth = graphics.PreferredBackBufferWidth;
GlobalClass.ScreenHeight = graphics.PreferredBackBufferHeight;

, теперь вернитесь к своему пользовательскому классу и замените вашкод этого:

int TextureHeight = GlobalClass.ScreenWidth;

Готово, таким образом, вы можете передать любое значение в любом месте.Просто убедитесь, что вы обновляете GlobalClass.ScreenWidth перед использованием его значения.

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

Класс Game1 содержит определение для GraphicsDevice, как вы уже использовали. Однако другие ваши классы, которые вы создали, этого не делают. Если вы хотите использовать класс GraphicsDevice в других классах, вам придется передать его этим классам, как и любой другой переменной.

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