Глава розповідає, як створити першу просту XNA програму для Windows Phone 7, яка виводить текстове привітання в центрі екрану.

Відмінністю такої програми в порівнянні з прграмою Silverligt в тому, що XNA не має встроєних шрифтів. Silverlight використовує векторні TrueType шрифти тоді як XNA не має можливості працювати з такими шрифтами. В XNA, все що відображається на екрані це бітове зображення, у тому числі і шрифти.

Якщо ви бажаєте використовувати конкретний шрифт в програмі XNA, цей шрифт необхідно включити у виконуваний файл у вигляді колекції зображень кожної літери. Існують стандартні шрифти, які ви можете використовувати і вільно розповсюджувати в програмах XNA, такі як:

Kootenay Lindsey Miramonte Miramonte Bold Pescadero Pescadero Bold Pericles Pericles Light Segoe UI Mono Segoe UI Mono Bold

Для створення проекту виконайте наступні дії File -> New -> Project. Далі у вікні Visual C# -> XNA Game Studio 4.0 -> Windows Phone Game (4.0). Виберіть каталог для збереження і назовіть свій проект XnaHelloPhone.

Visual Studio створить два проекти, один для самої програм а інший для її контенту і ресурсів.

Додайте шрифт до програми - зробіть правий клік на проекті контенту (який буде названий XnaHelloPhoneContent (Content) і з випадаючього списку виберіть Add -> New Item -> Sprite Font. Залиште назву файлу SpriteFont1.spritefont, і нажміть кнопку Add.

Слово “sprite” (вимовляється як спрайт) загальний термін при розробці ігор який зазвичай означає невелике бітове зображення, яке може рухатись по екрану.

В проект буде додано XML файл SpriteFont1.spritefont, який містить налаштування шрифту:

Тег Size - задає розмір шрифта у пікселях.

Секція CharacterRegions задає проміжок кодів символів у шістнадцятирічному форматі які вам необхідні в даній програмі. За замовчуванням він має значення від 0x32 до 0x126, які включає всі символи ASCII, крім спеціальних.

Основним файлом який ви будете використовувати для розробки простих невеликих ігор є файл проекту - Game1.cs. В ньому декларується клас Game1 наслідується від класу Game. Додайте до цього класу три нових властивості: string text = "Hello, Windows Phone 7!";

SpriteFont segoe14;

Vector2 textPosition;

Для проботи програми вам необхідно завантажити і ініціалізувати шрифт, для таких цілей в классі Game1 існує метод LoadContent, який виконується при ініціалізації програми. Перша строка методу вже написана для вас, вона створює об'єкт spriteBatch який використовується для відображення спрайтів на екрані. segoe14 = this.Content.Load<SpriteFont>("Segoe14");

Vector2 textSize = segoe14.MeasureString(text);

Viewport viewport = this.GraphicsDevice.Viewport;

textPosition = new Vector2((viewport.Width - textSize.X) / 2, (viewport.Height - textSize.Y) / 2);

Після закінчення фази ініціалізації, починається виконання програми, програма входить в ігровий цикл, який оновлює зображення на екрані зі швидкістю 30 кадрів в секунду. Послідовно визиваються два методи: Update потім Draw і так по колу.

Метод Draw ви використовуєте для того щоб відобразити щось на екрані. Якщо вам необхідно провести перед цим якісь підрахунки, слід використовувати метод * Update.

protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.Navy); spriteBatch.Begin();

spriteBatch.DrawString(segoe14, text, textPosition, Color.White);

spriteBatch.End();

base.Draw(gameTime);

Спрайти відображаються на екрані якщо вони повьязані з обьектом SpriteBatch, який було створено під час виконання методу LoadContent. Між викликами методів Begin та End може бути декілька визовів таких як DrawString для відображення тексту і методи Draw для відображення зображень. В даному випадку методу DrawString передається посилання на завантажений шрифт, текст який необхідно відобразити, позиція тексту на екрані, яка задає верхній лівий угол, і колір.

Запустіть програму. За замовчуванням Silverlight програми відображаються в портретній орієнтації, а XNA програми у горизонтальній орієнтації. Якщо ви запустили програму на емуляторі ви можете змінити його орієнтацію.

Література Programming Windows Phone 7, Charles Petzold