• Главная
  • Карта сайта
Не найдено

НОУ ІНТУЇТ | лекція | Введення в XNA Framework

  1. 1.2. Візуалізація шахівниці
  2. 1.2.1. Конфігурація DirectX для налагодження приложени

Додайте виклик цього методу в кінець обробника події Paint і знову запустіть програму на виконання - на екрані з'явиться вікно, закрашене синім кольором, що і було потрібно. Вихідний код готового додатка знаходиться в каталозі Ch01 \ Ex01.

1.2. Візуалізація шахівниці

Одна з перевантажень методу GraphicsDevice.Clear дозволяє очищати не весь екран цілком, а лише задану прямокутну область форми:

public void Clear (ClearOptions options, Color color, float depth, int stencil, Rectangle [] rect);

де

rect - масив структур Microsoft.Xna.Framework.Rectangle, які задають прямокутні області екрану, які повинні бути очищені. Області екрану задаються в віконних координатах форми - початок координат розташовано в лівому верхньому кутку. Структура Microsoft.Xna.Framework.Rectangle є близнюком однойменної структури з простору імен System.Drawing, і використовується, щоб уникнути прив'язки XNA Framework до платформи Windows.

Примітка

Структура Rectangle оголошена в просторі імен Microsoft.Xna.Framework, так як він використовується багатьма класами XNA Framework, в тому числі і не з простору імен Microsoft.Xna.Framework.Graphics.

Наприклад, наступний фрагмент коду намалює в центрі екрану зелeного прямокутник на синьому тлі ( малюнок 1.6 ):

// Зафарбовуємо екран синім кольором device.Clear (Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue); // Создаeм масив з координатами областей екрану, які необхідно зафарбувати. Нам // потрібна всього одна область Microsoft.Xna.Framework.Rectangle [] rect = new Microsoft.Xna. Framework.Rectangle [1]; // Задаeм координати області екрана, розташованої в центрі екрану і займає 25% // площі екрану rect [0] = new Microsoft.Xna.Framework.Rectangle (ClientSize.Width / 4, ClientSize.Height / 4, ClientSize.Width / 2 , ClientSize.Height / 2); // Зафарбовуємо цю область зелeного кольором device.Clear (ClearOptions.Target, Microsoft.Xna.Framework. Graphics.Color.Green, 0.0f, 4> 0, rect); Лістинг 1.3.
Мал. 1.6. Зелeного квадрат на синьому тлі, намальований з використанням методу Clear

В принципі при грамотному використанні тільки одного методу Clear можна отримувати досить цікаві зображення. Наприклад, ніхто не заважає нам намалювати шахову дошку ( малюнок 1.7 ). Для цього необхідно очистити екран білим кольором, потім створити масив областей екрану, відповідних клітин дошки коричневого кольору і ещe раз очистити екран, але вже коричневим кольором ( лістинг 1.4 ).


Мал.1.7.

Шахова дошка, намальована з використанням методу Clear // Повний код програми знаходиться в каталозі Examples \ Ch01 \ Ex02 private void MainFormPaint (object sender, PaintEventArgs e) {// Очищаємо екран білим кольором device.Clear (Microsoft.Xna.Framework.Graphics. Color. WhiteSmoke); // Создаeм масив областей зафарбовування, відповідних коричневим клітинам Microsoft.Xna.Framework.Rectangle [] rects = new Microsoft.Xna.Framework.Rectangle [32]; int k = 0; // Перебираємо коричневі клітини шахової дошки for (int j = 0; j <8; j ++) for (int i = j% 2; i <8; i + = 2) {// Заносимо в масив координати чергової клітини rects [k ] = new Microsoft.Xna.Framework.Rectangle (i * ClientSize.Width / 8, 4 j * ClientSize.Height / 8, ClientSize.Width / 8, ClientSize.Height / 8); k ++; } // Зафарбовуємо все області з масиву rects коричневим кольором device.Clear (ClearOptions.Target, Microsoft.Xna.Framework. Graphics.Color.Brown, 0.0f, 0, 4> rects); device.Present (); } Лістинг 1.4.

1.2.1. Конфігурація DirectX для налагодження приложени

Як ви пам'ятаєте, на платформі Windows XNA Framework в деякому роді є високорівневою надбудовою над DirectX. Відповідно, на платформі Windows переважна більшість викликів методів XNA Framework так чи інакше транслюється в виклики методів DirectX. У більшості випадків ця обставина можна повністю ігнорувати. Проте, при виникненні різних "аномалій" в додатку звернення до нижчого рівня може допомогти швидко вирішити проблему.

Конфігурація DirectX здійснюється за допомогою утиліти DirectX, яку запускає командою Start | All Programs | Microsoft DirectX SDK | DirectX Utilities | DirectX Control Panel. Зовнішній вигляд цієї утиліти ізображeн на малюнку 1.8 . Як видно, дана утиліта є звичайне діалогове вікно з набором вкладок, що відповідають за налаштування різних компонентів DirectX. Розглянемо найбільш важливі з них.


Мал.1.8.

Зовнішній вигляд утиліти конфігурації DirectX. Відкрита вкладка Direct3D

Вкладка Direct3D призначена для настройки компонента Direct3D Graphics. Як правило, ця вкладка використовується для перемикання між отладочной і "звичайної" версією Direct3D за допомогою перемикачів Use Debug Version of Direct3D і Use Retail Version of Direct3D відповідно (розташовані в групі Debug / Retail D3D Runtime). Отладочная версія Direct3D Graphics проводить додаткову перевірку правильності параметрів переданих класів Direct3D Graphics і правильності виконання цих методів. Інформація про різні підозрілих ситуаціях і помилки передаeтся в відладчик (наприклад, в відладчик Visual Studio 2005).

При розробці і налагодженню додатків рекомендується завжди використовувати отладочную версію Direct3D Graphics. Так само корисно встановити повзунок Debug Output Level, що відповідає за подробицю налагоджувальної інформації в крайнє праве положення, щоб отримувати інформацію про будь-які підозрілі ситуаціях. Адже згідно "ефекту метелика", навіть найбезпечніший на перший погляд недочeт може привести до каскаду важковловимих помилок.

У групі Debugging бажано включити такі прапорці: Maximum Validation (максимальна перевірка коректності параметрів, переданих класів Direct3D Graphics), Enable Shader Debugging (налагодження шейдерів) і Break on Memory Leaks (виявлення витоків пам'яті).

Увага

Отладочная (Debug) версія DirectX Graphics значно повільніше звичайної (Retail) версії. Тому не забувайте відключати отладочную версію DirectX по завершенню налагодження. В іншому випадку ви ризикуєте зіткнутися з аномально низькою продуктивністю трeхмерних ігр та аналогічних програм. Для того щоб переключитися в нормальний режим, досить просто включити радіокнопку Use Retail Version of DirectX - інші опції на зразок Debug Output Level не роблять ніякого впливу на звичайну версію Direct3D Graphics.

Debug View

За замовчуванням Visual Studio 2005 Pro не відображує повідомлення від налагоджувальної версії DirectX, а в безкоштовній версії Visual C # 2005 Express подібна функціональність не передбачена в принципі. Тому я включив в За замовчуванням Visual Studio 2005 Pro не відображує повідомлення від налагоджувальної версії DirectX, а в безкоштовній версії Visual C # 2005 Express подібна функціональність не передбачена в принципі example.zip безкоштовну програму Марка Руссиновича Debug View, розташовану в каталозі \ Tools \ DebugView. Скопіюйте еe на локальний жорсткий диск комп'ютера і запустіть файл DebugView.exe. На екрані з'явиться вікно наступного вигляду ( малюнок 1.9 ). Найбільший інтерес для нас представляє центральна частина вікна, в якій відображають налагоджувальні повідомлення від усіх додатків, що виконуються в даний момент на комп'ютері. Якщо ви попрацюєте деякий час на комп'ютері при запущеної утиліти Debug View, то напевно помітите безліч налагоджувальних повідомлень від різноманітних додатків.

Відкрийте панель управління DirectX, і включіть отладочную версію DirectX. Запустіть на виконання додаток, що малює шахову дошку (приклад Ch01 \ Ex02), попрацюйте з ним деякий час, після чого завершіть. Тим часом у вікні Debug Info з'явиться інформація такого вигляду:

// Бібліотека Direct3D завантажується в адресний простір нашого застосування Direct3D9:: ====> ENTER: DLLMAIN (041dd6e0): Process Attach: 0000041c, tid = 000016a8 Direct3D9:: ====> EXIT: DLLMAIN (041dd6e0): Process Attach : 0000041c // Direct3D знаходиться в отладочном режимі Direct3D9: (INFO): Direct3D9 Debug Runtime selected. // Розширені можливості налагодження Direct3D недоступні (ця функціональність доступна // тільки для DirectX-додатків, написаних на C ++) D3D9 Helper: Enhanced D3DDebugging disabled; Application was not compiled with D3D_DEBUG_INFO // Повідомлення з позначкою INFO містять різноманітну службову інформацію про хід // виконання програми. Зокрема наступне повідомлення означає, що пристрій // знаходиться в режимі Software Vertex Processing (Програмна обробка вершин). Іншими // словами, при створенні графічного пристрою був використаний прапор // CreateOptions.SoftwareVertexProcessing. Direct3D9: (INFO): ======================= Hal SWVP device selected Direct3D9: (INFO): HalDevice Driver Style 9 Direct3D9:: DoneExclusiveMode Direct3D9:: ====> ENTER: DLLMAIN (041dd6e0): Process Detach 0000041c, tid = 0000022c // Звільнення ресурсів Direct3D завершено Direct3D9: (INFO): MemFini! // Завершення роботи Direct3D Direct3D9:: ====> EXIT: DLLMAIN (041dd6e0): Process Detach 0000041c

Зверніть увагу

У стовпці Time вказано час надходження отладочного повідомлення, що полегшує ідентифікацію повідомлень. За замовчуванням використовується відносне час - за точку отсчeта береться час надходження першої події, тобто час настання першої події завжди дорівнює 0.0 секунд.

Як видно, додаток виконується без будь-яких ексцесів. Тепер закоментуйте рядок device.Dispose () в обробнику події Close () і знову запустіть додаток на виконання. На цей раз налагоджувальні повідомлення будуть дещо відрізнятися:

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью