繁体   English   中英

XNA将Texture2D添加到主构造函数

[英]XNA Adding a Texture2D to Main Constructor

我有一个名为Ball的类(用于pong项目),因此需要通过Main Constructor传递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;

        }

然后在Main Game1.cs中

 Ball ball = new Ball();

我应该通过Main中的哪些参数来显示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并且如果您多次加载相同的纹理,则只会将该纹理加载到内存中一次(调用第一次加载)。 对于所有后续调用,将返回相同的Texture2D实例。

XNA在首次更新之前和每次重置图形设备之前都会调用Game.LoadContent()方法(这可能会由于多种原因而随时发生)。 因此,您需要小心在LoadContent()方法中进行的操作。 例如,如果您尝试在LoadContent()创建Ball类实例,则在游戏_ballSpeed随时可以用新的Ball实例替换该Ball实例,并且_ballSpeed_ballMovement_ballPosition值将丢失。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM