Урок 1: Собственный курсор в игре на XNA

Итак, начинаем. Сразу предупрежу, что я буду нелогична и непоследовательна. Буду описывать способы решения вопросов по мере накопления «понимания» в этом вопросе.

Всегда игры имеют GUI. Часто GUI в играх использует мышь. И, причем, указатель мыши — не обычная стрелочка, а что нибудь особо-специальное.
Как быстро сделать свой курсор в игре, использующей XNA framework? Всего четыре шага.

  1. Рисуем в фотошопе, джимпе, пэинте курсор, или утаскиваем из инета готовый. Я решила нарисовать в фотошопе вот такую картинку
    Конвертируем картинку курсора в удобоваримый формат (например, PNG) и, желательно, с прозрачным фоном.
  2. Переходим на студию, и подключаем картинку к проекту. Если для содержимого (content) у вас используется отдельный проект — то щелкаем по нему правой кнопкой, жмем «Добавить» («Add») -> «Существующий элемент» («Existing Item»), или Shift+Alt+A на клавиатуре. Если под контент отведена папка проекта, то, соответственно, добавляем Existing Item туда. Теперь настраиваем свойства (properties) картинки. В первую очередь, если ваш курсор в будущем может измениться, лучше установить поле «Копировать в каталог назначения» («Copy to output directory») в значение «Копировать всегда» («Copy always») — тогда никогда не придется отвлекаться на эти вопросы (однако следует помнить, что такие настройки увеличивают время построения (build) проекта, поэтому в критичных к времени сборки проектах следует, при самостоятельном отслеживании изменений содержимого, выставлять значение этого поля в «Копировать если отсутствует» («Copy if newer») или даже в «Не копировать» («Do not copy»)). Второе поле, на которое надо обратить внимание — «Псевдоним» («Asset name») — это имя изображения для конвейера содержимого XNA (contetn pipeline), именно по этому имени мы сможем обращаться к ресурсу в проекте. Допустим, мы назвали наше изображение «cursor».
  3. Наконец то начался код. Объявляем нужные поля:
    Texture2D cursor; //Спрайт с изображением-курсором
    Rectangle cursorPosition; //Текущая позиция курсора

    Теперь в методе LoadContent нужно загрузить спрайт курсора:
    cursor = Сontent.Load("cursor");
    На этом подготовка завершена.
  4. И наконец, реализуем отрисовку и логику курсора. Рисуем его так (в методе Draw):
    spriteBatch.Draw(cursor, cursorPosition, Color.White);
    Разумеется, эта инструкция должна стоять между spriteBatch.Begin(); и spriteBatch.End();.
    Теперь осталось только рассчитать позицию курсора в методе Update:
    cursorPosition = new Rectangle(Mouse.GetState().X, Mouse.GetState().Y, cursor.Width, cursor.Height);

Профит! Наслаждаемся своим собственным курсором: