2016-09-09 3 views
0

У меня есть класс с именем Болл (для тенниса проекта), и мне нужно пройти через Texture2D Главного Конструктора, как так:XNA Добавление Texture2D к основному Constructor

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; 

     } 

и затем в Главном Game1.cs

Ball ball = new Ball(); 

Что я должен пройти хотя параметры Main иметь Texture2D появляются?

+0

Вы просите * как * передать экземпляр текстуры в конструктор 'Ball', или * what *, чтобы пройти? –

+0

технически обе. Я знаю, что мне нужно передать Texture2D, потому что, когда я выделяю сообщение об ошибке, вы видите Texture2D sprite, однако я не уверен, что мне нужно поместить в параметр. Я пытаюсь поставить _ballSprite, но он не существует в Game1.cs, и я хочу, чтобы он –

ответ

2

Вы не должны пройти Texture2D в конструкторе. Графические ресурсы, такие как Texture2D, могут быть удалены во время игры в случае сброса графического устройства. И каждый раз, когда это произойдет, вам понадобятся новые экземпляры всех объектов Texture2D.

Поэтому в XNA вся загрузка содержимого графических ресурсов должна выполняться внутри метода LoadContent(). Класс Game переопределяет класс LoadContent(). Там вы можете загрузить текстуру, как это: byBall.BallSprite = Content.Load<Texture2D>("balltexture"); (вам нужно сделать BallSprite собственности общественности в этом случае)

Или вы могли бы создать метод для загрузки внутри класса Бал

public void LoadContent(Content content) 
{ 
    _ballSprite = content.Load<Texture2D>("balltexture"); 
} 

, а затем вызвать myBall.LoadContent(Content) из перекрываться Game класс LoadContent() способ.

Обратите внимание, что этот объект Content является ContentManager и будет в случае, если вы загрузите одну и ту же текстуру несколько раз, загрузите эту текстуру в память только один раз (вызывается первая загрузка). Для всех последующих вызовов будет возвращен экземпляр Texture2D.

Game.LoadContent() метод вызывается XNA перед первым обновлением и каждый раз, когда графическое устройство сбрасывается (это может произойти по ряду причин в любое время). Поэтому вам нужно быть осторожным, что вы делаете внутри метода LoadContent(). Например, если вы попытаетесь создать экземпляр класса Ball внутри LoadContent(), этот экземпляр шара может быть заменен новым экземпляром шара в любое время в середине игры и _ballSpeed, _ballMovement, _ballPosition значения будут потеряны.