Прежде всего, вам, похоже, не хватает понимания того, как работают классы (и пространства имен).Я бы предложил (как я уже сделал в комментарии к вашему другому вопросу) сначала поработать над простой игрой, которая не нуждается в классах.
Теперь поговорим о проблемах в вашем коде:
Прежде всего, для загрузки контента необходимо инициализировать графическое устройство.Он не инициализируется до тех пор, пока LoadContent
не будет вызван в Microsoft.Xna.Framework.Game
.Это объяснено в документации :
Этот метод вызывается Initialize.Кроме того, он вызывается каждый раз, когда игровой контент должен быть перезагружен, например, когда происходит событие DeviceReset.Вам не следует обращаться к GraphicsDevice до тех пор, пока не будет вызван LoadContent.
Итак, переместите код загрузки:
protected override void LoadContent()
{
PlayerTexture = Content.Load<Texture2D>("Player");
PlayerPosition = Vector2.Zero;
base.LoadContent();
}
Обратите внимание, что это переопределение (защищенный метод).Я не очень хочу объяснять, что это значит здесь, но я предлагаю вам выяснить.
Кроме того, вы обнаружите, что Draw
и Update
должны быть аналогичным образом переопределены,как они будут вызываться из XNA.
Теперь вот важный бит: То, что я только что сказал вам, применимо, если вы наследуете класс игры отXNA Game
класс.Называя его «Игрок», вы указываете на неправильное понимание того, как работают классы.
Если вы создаете класс «Игрок», взгляните на то, что вам сказали в ответе на ваш другой вопрос..
Вы также можете найти этот недавний вопрос , который стоит прочитать.