Вы не должны пройти 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
значения будут потеряны.
Вы просите * как * передать экземпляр текстуры в конструктор 'Ball', или * what *, чтобы пройти? –
технически обе. Я знаю, что мне нужно передать Texture2D, потому что, когда я выделяю сообщение об ошибке, вы видите Texture2D sprite, однако я не уверен, что мне нужно поместить в параметр. Я пытаюсь поставить _ballSprite, но он не существует в Game1.cs, и я хочу, чтобы он –