Класс игрока с моей игрой C # XNA - PullRequest
5 голосов
/ 08 октября 2010

Я обычно обращаюсь за помощью на форумах XNA, но они сейчас недоступны, поэтому я пришел сюда.

Я делаю новую игру XNA и хочу иметь класс игрока,На данный момент у меня есть основной класс игры под названием Dots.Это представляет основную игру.Вот как выглядит мой класс Player:

namespace Dots
{
    class Player : Microsoft.Xna.Framework.Game
    {
        Texture2D PlayerTexture;
        Vector2 PlayerPosition;

        public Player()
        {
            Content.RootDirectory = "Content";
            PlayerTexture = Content.Load<Texture2D>("Player");
            PlayerPosition = Vector2.Zero;
        }

        public void Update()
        {

        }

        public void Draw(SpriteBatch SpriteBatch)
        {

        }
    }
}

Но я получаю сообщение об ошибке, которое не могу понять, как ее решить.Ошибка:

Ошибка загрузки «Player».Компонент GraphicsDevice не найден.

Он выдает его в этой строке: PlayerTexture = Content.Load<Texture2D>("Player");.

Я вижу, что в основном классе игры есть эта строка: Graphics = new GraphicsDeviceManager(this);, но у меня нетИдея что с этим делать.Я передаю его в мой Player класс или как?

Любая помощь приветствуется, спасибо.

Ответы [ 5 ]

6 голосов
/ 09 октября 2010

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

Теперь поговорим о проблемах в вашем коде:

Прежде всего, для загрузки контента необходимо инициализировать графическое устройство.Он не инициализируется до тех пор, пока 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 класс.Называя его «Игрок», вы указываете на неправильное понимание того, как работают классы.

Если вы создаете класс «Игрок», взгляните на то, что вам сказали в ответе на ваш другой вопрос..

Вы также можете найти этот недавний вопрос , который стоит прочитать.

2 голосов
/ 09 октября 2010

ОБНОВЛЕНИЕ: Этот ответ, по-видимому, правильный для более старых версий XNA. См. ответ Эндрю Рассела о том, что используется в настоящее время.

Попробуйте переопределить метод LoadGraphicsContent для загрузки вашего контента. Как показано в этого урока .

    protected override void LoadGraphicsContent(bool loadAllContent)
    {
        if (loadAllContent)
        {
            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
            // TODO: Load any ResourceManagementMode.Automatic content
            t2dMap = content.Load<Texture2D>(@"content\textures\map_display");
            t2dColorKey = content.Load<Texture2D>(@"content\textures\map_colorkey");
        }
        // TODO: Load any ResourceManagementMode.Manual content
    }
1 голос
/ 24 мая 2012

Недавно в XNA вы теперь можете щелкнуть правой кнопкой мыши по определенным параметрам и настроить Intellisense для вас.Таким образом, щелкнув правой кнопкой мыши на Texture2D и Rectangle, когда вы объявите, вы сможете выбрать «Resolve», и он попросит вас выбрать «использование» какой-нибудь другой библиотеки, чтобы потом ее можно было скомпилировать.Посмотрите, решит ли это вашу проблему.Но, как правило, с классами, особенно я использую это, и это работает хорошо.

0 голосов
/ 20 ноября 2012

Контрольный список того, что сработало для меня:

  • Попробуйте поместить шрифт в корневую папку вашего контент-проекта
  • Убедитесь, что Build Action установлено на Compile
  • Проверьте содержимое файла .spritefont (используйте этот вопрос для справки)
  • Убедитесь, что вы находитесь на LoadContent или более поздней стадии жизненного цикла
0 голосов
/ 09 октября 2010

Думаю, что однажды у меня была похожая ошибка.

Щелкните правой кнопкой мыши Решение в обозревателе решений.

Перейдите в Свойства.

Если игровой профиль имеет значение "Hi Def".. изменить на" Достичь ".

Перекомпилировать и запустить.

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