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

Урок 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);

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

devSonia

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

Александр Опубликовано9:44 пп - Ноя 16, 2012

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

ez payday loans Опубликовано3:11 дп - Янв 18, 2013

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.

internet marketing Опубликовано1:05 пп - Янв 18, 2013

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

payday loans in houston tx Опубликовано3:36 пп - Янв 21, 2013

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!

Munchkin teething blanket Опубликовано11:20 пп - Май 6, 2013

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.