Для того чтобы вывести текст на экран, необходимо добавить в папку с контектом файл с названием *.spritefont, где * – название шрифта, этот файл содержит следующие строки:
<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
<Asset Type= " Graphics: FontDescription»>
<FontName>Segoe UI</FontName>
<Size>15</Size>
<Spacing>0</Spacing>
<UseKerning>true</UseKerning>
<Style>Bold</Style>
<CharacterRegions>
<CharacterRegion>
<Start> </Start>
<End>~</End>
</CharacterRegion>
<CharacterRegion>
<Start>А</Start>
<End>я</End>
</CharacterRegion>
</CharacterRegions>
</Asset>
</XnaContent>
FontName – в этих тегах заключено имя шрифта, Microsoft не рекомендует использовать какие-либо специфические шрифты, одни из рекомендуемых – шрифты Segoe разных разновидностей.
Size – определяет размер шрифта.
Style – определяет стиль шрифта (Regular, Bold, Italic).
CharacterRegion – определяет символы, которые можно использовать, в данном случае это русские и английские буквы, цифры и некоторые специальные символы.
После добавления этого файла в проект, его необходимо объявить в коде:
SpriteFont Название_переменной; // Создаем переменную в начале класса Game1
В методе LoadContent() прописываем следующее:
Название_переменной = Content.Load<SpriteFont>("*"); //где * – название файла
В методе Draw(GameTime gameTime) выводим текст на экран:
spriteBatch.DrawString(Название_переменной, "Текст, который необходимо вывести", new Vector2(координата_x, координата_y), Color.Цвет);
Вывод изображения аналогичен выводу текста:
Texture2D Название_переменной; // Создаем переменную в начале класса Game1
В методе LoadContent() прописываем следующее:
название_переменной = Content.Load<Texture2D>("*"); // где * – название файла
В методе Draw(GameTime gameTime) рисуем текстуру:
spriteBatch.Draw(название_переменной, new Rectangle(координата_x, координата_y, ширина, высота), Color.White);
Современные мобильные телефоны в большинстве случаев оснащены большим сенсорным экраном и минимальным количеством аппаратных кнопок, поэтому и организация взаимодействия с играми построена на считывании жестов с экрана.
В методе Game1() прописываются жесты, что могут быть использованные в игре:
public Game1()
{
<…>
TouchPanel.EnabledGestures = GestureType.Tap | GestureType.FreeDrag;
<…>
}
Все возможные жесты можно посмотреть в подсказке, всплывающей при вводе" GestureType". Наиболее часто используемые из них, это Tap – нажатие, FreeDrag – перетягивание, Hold – долгое нажатие, DoubleTap – двойное нажатие. Так же можно обработать и действия при отсутствии жестов.
В логике игры размещается следующее:
while (TouchPanel.IsGestureAvailable)
{
// Считывание жеста
GestureSample gesture = TouchPanel.ReadGesture();
// Координаты касания и другие необходимые параметры
int tapY = (int)gesture.Position.Y;
int tapX = (int)gesture.Position.X;
<…>
switch (gesture.GestureType)
{
// Если жест является нажатием:
case GestureType.Tap:
<…>
break;
<…>
// Если жест является перетягиванием:
case GestureType.FreeDrag:
<…>
break;
}
}
Обработка нажатий на аппаратные кнопки тоже важна, однако в приложении запрещено использовать их для нестандартных функций (например, аппаратную кнопку назад для установления паузы).
Одним из требований к приложениям и играм является то, что необходимо программировать действия для аппаратной кнопки назад таким образом, что после нажатия на нее показывается предыдущий модуль игры (не относится к игровым уровням), пример:
Меню – Список уровней – Уровень 1 – Уровень 2
Из любого уровня переход назад осуществляется в Список уровней, даже если новый уровень запускался после предыдущего, из Списка уровней соответственно в Меню, из Меню же происходит выход из приложения:
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
О проекте
О подписке
Другие проекты
