添加一个Texture2D到主构造器

本文关键字:Texture2D 构造器 一个 添加 | 更新日期: 2023-09-27 18:06:13

我有一个名为Ball的类(用于pong项目),我需要通过主构造函数传递Texture2D,如下所示:

Ball.cs

 public class Ball
    {
        Texture2D _ballSprite;
        private float _ballSpeed;
        private Vector2 _ballMovement;
        private Vector2 _ballPosition;
        private const int WINDOW_WIDTH = 800;
        private const int WINDOW_HEIGHT = 600;

        public Ball(Texture2D sprite) 
        {
            _ballSprite = sprite;
        }

,然后在MainGame1.cs

 Ball ball = new Ball();

我应该通过Main中的参数来显示Texture2D吗?

添加一个Texture2D到主构造器

你不应该在构造函数中传递Texture2D。像Texture2D这样的图形资源可以在游戏运行时在图形设备被重置的情况下被处置。每次发生这种情况时,您将需要所有Texture2D对象的新实例。

因此在XNA中所有图形资源的内容加载都应该在LoadContent()方法内完成。Game类覆盖LoadContent()方法。你可以这样加载你的纹理:byBall.BallSprite = Content.Load<Texture2D>("balltexture");(在这种情况下,你需要将BallSprite属性设置为公共)

或者你可以在Ball类

中创建一个方法来加载
public void LoadContent(Content content)
{
   _ballSprite = content.Load<Texture2D>("balltexture");
}

,然后从覆盖的GameLoadContent()方法调用myBall.LoadContent(Content)

注意,Content对象是ContentManager,如果你多次加载相同的纹理,只在内存中加载该纹理一次(第一次调用load)。对于所有后续调用,将返回相同的Texture2D实例。

Game.LoadContent()方法由XNA在第一次更新之前和每次图形设备重置时调用(这可能在任何时候由于多种原因而发生)。所以你需要小心你在LoadContent()方法中做的事情。例如,如果你试图在LoadContent()中创建Ball类实例,那么这个球实例可能会在游戏中随时被新的球实例所取代,_ballSpeed, _ballMovement, _ballPosition的值将会丢失。