Я не понимаю, что не так с моим кодом PNA XNA / C # - PullRequest
0 голосов
/ 19 июля 2011

Я следовал этому уроку -

Я использовал третий метод (полиморфизм), чтобы добавить экраны в свою игру, и теперь я получаю ошибки.

Он говорит, что 'Графический компонент не найден'

Я закомментирую этот код -

        ////Vector2 ballPosition = new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X + GraphicsDevice.Viewport.TitleSafeArea.Width / 2,
        ////    GraphicsDevice.Viewport.TitleSafeArea.Y + GraphicsDevice.Viewport.TitleSafeArea.Height / 2);
        //ball.Initialize(Content.Load<Texture2D>("pongball2"), ballPosition);


        ////Vector2 paddle1Position = new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X + GraphicsDevice.Viewport.TitleSafeArea.Width / 100 * 5,
        ////    GraphicsDevice.Viewport.TitleSafeArea.Y + GraphicsDevice.Viewport.TitleSafeArea.Height / 2);
        //paddle1.Initialize(Content.Load<Texture2D>("pongpaddle1"), paddle1Position);

        ////Vector2 paddle2Position = new Vector2(GraphicsDevice.Viewport.TitleSafeArea.X + GraphicsDevice.Viewport.TitleSafeArea.Width / 100 * 99,
        ////    GraphicsDevice.Viewport.TitleSafeArea.Y + GraphicsDevice.Viewport.TitleSafeArea.Height / 2);
        //paddle2.Initialize(Content.Load<Texture2D>("pongpaddle2"), paddle2Position);


        //Score = Content.Load<SpriteFont>("score");

И это работает, но затем, после первого экрана, оно не перейдет к следующему.

Да, я в тупике.

1 Ответ

2 голосов
/ 19 июля 2011

Взгляните на конструктор для ContentManager. Требуется параметр IServiceProvider.

Менеджер контента использует поставщика услуг для получения IGraphicsDeviceService. Эта услуга просто предоставляет объект GraphicsDevice. Контент-менеджеру требуется графическое устройство для загрузки текстур на указанное устройство.

По умолчанию GraphicsDeviceManager (который является IGraphicsDeviceService) зарегистрируется с Game.Services (который является ISeviceProvider), когда вы создаете его в конструкторе вашего класса игры ( происходит от Game).

ContentManager, предоставляемый Game.Content, использует того же (Game.Services) поставщика услуг. Таким образом, к моменту вызова LoadContent он может запросить у поставщика услуг сервис графического устройства, из которого он может получить свое графическое устройство.

Исключение, которое вы получаете, заключается в том, что используемый вами ContentManager не может получить графическое устройство (или, возможно, допустимое графическое устройство).

И причиной этого является вопиющее злоупотребление класса Game. У вас должен быть только один. Ваш класс Screen наследуется от Game, поэтому у вас их несколько! Не делай этого!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...