Итак, начинаем. Сразу предупрежу, что я буду нелогична и непоследовательна. Буду описывать способы решения вопросов по мере накопления «понимания» в этом вопросе.
Всегда игры имеют GUI. Часто GUI в играх использует мышь. И, причем, указатель мыши — не обычная стрелочка, а что нибудь особо-специальное.
Как быстро сделать свой курсор в игре, использующей XNA framework? Всего четыре шага.
- Рисуем в фотошопе, джимпе, пэинте курсор, или утаскиваем из инета готовый. Я решила нарисовать в фотошопе вот такую картинку
Конвертируем картинку курсора в удобоваримый формат (например, PNG) и, желательно, с прозрачным фоном. - Переходим на студию, и подключаем картинку к проекту. Если для содержимого (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».
- Наконец то начался код. Объявляем нужные поля:
Texture2D cursor; //Спрайт с изображением-курсором
Rectangle cursorPosition; //Текущая позиция курсора
Теперь в методе LoadContent нужно загрузить спрайт курсора:
cursor = Сontent.Load
("cursor");
На этом подготовка завершена. - И наконец, реализуем отрисовку и логику курсора. Рисуем его так (в методе 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);
Профит! Наслаждаемся своим собственным курсором: