— Ничего не поделаешь, — возразил Кот. — Все мы здесь не в своем уме — и я, и ты, иначе бы ты сюда не попала. (с) Льюис Кэрролл

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

Опубликовал devSonia Февраль - 12 - 2012

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

Всегда игры имеют 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);

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

5 комментариев

  1. Александр:

    Спасибо большое за пример. делал по примеру с xnadev — не получилось. набрел на Ваш пример, все отлично. еще раз спасибо! =)

  2. Admiring the commitment you put into your website and in depth information you provide.
    It’s awesome to come across a blog every once in a while that isn’t
    the same outdated rehashed information. Wonderful read!
    I’ve saved your site and I’m adding your RSS feeds to my Google account.

  3. This article gives clear idea designed for the new viewers of
    blogging, that actually how to do blogging.

  4. Hello would you mind sharing which blog platform you’re working with? I’m looking to start my own blog in the near future but I’m having a tough time choosing between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design and style seems different then most blogs and I’m looking for
    something completely unique. P.S My apologies
    for getting off-topic but I had to ask!

  5. I am extremely impressed with your writing skills as
    well as with the layout on your weblog. Is this a paid theme or did you customize
    it yourself? Either way keep up the excellent quality writing, it’s rare to see a nice blog like this one these days.


  • Яндекс.Метрика Счетчик PR-CY.Rank