跨类转移纹理

时间:2013-11-15 13:10:23

标签: c# class xna texture2d

(调整大小和LoadContent()

我希望通过让我的标题屏幕在一个类中来分离纹理,并在需要时调用它。这有助于整洁,但我只是在跨类移动精灵,Texture2D是不一样的。

我有一张1024X768的图片,我正在调用Title Screen.cs中的图片,希望能够在LoadContent()中使用Title Screen.cs加载任何内容而不必转到Game1.cs加载图像并返回Title Screen.cs。使用Title Screen.cs中的加载内容将使我的代码更易于阅读和理解。它也需要适合屏幕而不是,我想知道我可以使用什么功能来调整它的大小。

(我现在有一个功能来调整图像大小,但它只是一个手动修复。我必须输入正确的屏幕宽度,是否有一种简单的方法来检查屏幕的高度和宽度?)


编辑:我现在已经修改了要更新到新版本的代码。

我正常启动主类Game1.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Title_Test
{
public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

    public Game1()
    {
        Title_Screen.Content = Content;
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
    }

    protected override void Initialize()
    {

        base.Initialize();
    }

    protected override void LoadContent()
    {
        // Create a new SpriteBatch, which can be used to draw textures.
        spriteBatch = new SpriteBatch(GraphicsDevice);

        Title_Screen.Load();
    }

    protected override void UnloadContent()
    {
    }

    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        Title_Screen.Draw(spriteBatch);

        base.Draw(gameTime);
    }
}
}

Title Screen.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace Title_Test
{
class Title_Screen
{
    public static ContentManager Content;
    public static Texture2D titleScreenPH;//Texture to be transferred.
    Vector2 TitleScreen = new Vector2(0, 0);

    public static int myWidth = 800;
    public static int myHeight = 480;

    public static void Load()
    {
        titleScreenPH = Content.Load<Texture2D>(@"Images\TitleScreenPH");
    }

    static public void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Begin();
        spriteBatch.Draw(titleScreenPH, new Rectangle(0, 0, myWidth, myHeight), Color.White);
        spriteBatch.End();
    }
}
}

1 个答案:

答案 0 :(得分:0)

如果您需要更改精灵的绘图大小,请查看SpriteBatch类的Draw()方法的重载:

spriteBatch.Draw(titleScreenPH, new Rectangle(0, 0, myWidth, myHeight), Color.White);

修改

  

我有一张图像1024X768,正在调用标题中的图像   Screen.cs并希望能够在Title Screen.cs中使用LoadContent()   加载任何东西而不必去Game1.cs来加载图像   并回到Title Screen.cs。使用标题中的加载内容   Screen.cs将使我的代码更易于阅读和理解。

在这种情况下我不会使用静态成员,虽然你可以这样避免它:

class Title_Screen{
    //...
    public static ContentManager Content;
    Texture2D titleScreenPH;

    //...
    public static void Load(){
       titleScreenPH = Content.Load<Texture2D>(@"Images\TitleScreenPH");
    }
}

然后:

public class Game1 : Microsoft.Xna.Framework.Game{
    //...

    public Game1(){
        //...
        Title_Screen.Content = Content;
    }

    protected override void LoadContent(){
        //...
        Title_Screen.Load();
    }
}

编辑2:

  

我现在有一个功能来调整图像大小,但它只是一本手册   固定。我必须输入正确的屏幕宽度,有一个简单的   检查屏幕高度和宽度的方法?

是的,您可以从GraphicsDevice.PresentationParameters属性中获取屏幕尺寸:

int screenWidth = graphicsDevice.PresentationParameters.BackBufferWidth;
int screenHeight = graphicsDevice.PresentationParameters.BackBufferHeight;