获取屏幕的宽度/高度不在主类(XNA)中

时间:2011-08-05 21:34:41

标签: c# xna

好吧,所以我基本上想要制作一个地形,就像一个直的场或什么的。 所以我需要一个纹理宽度的屏幕宽度。 我试着这样做:

int TextureHeight = graphics.PrefferedBackBufferWidth;

就像我在game1.cs类中所做的一样,但它不允许我做“图形”属性。 我也尝试过这样做: GraphicsDevice.Viewport.TitleSafeArea.X 所以我不知道该怎么做,也许还有另一种方法可以在整个屏幕宽度上绘制纹理? 顺便说一句,我提到的那两种图形方法有什么区别?

感谢帮助者。

2 个答案:

答案 0 :(得分:0)

Game1类包含GraphicsDevice的定义,正如您已经使用过的那样。但是,您创建的其他类不会。如果要在其他类中使用GraphicsDevice类,则必须将其传递给这些类,就像任何其他变量一样。

答案 1 :(得分:0)

你需要一个graphicsDevice,但是创建很多图形设备和其他东西真的很麻烦。因此,在游戏中传递任何你想要的值(比如你的屏幕宽度)的一种非常简单的方法是创建一个“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)并在更新Methode Update中更新这些变量的值,屏幕高度和屏幕宽度如下:

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

现在回到你的自定义类替换你的代码:

int TextureHeight = GlobalClass.ScreenWidth;

已经完成了,这样你就可以在任何地方传递你想要的任何价值。只需确保在使用其值之前更新GlobalClass.ScreenWidth。