Налагодження програми за допомогою XNA в Silverlight5
Пояснення пояснюються по порядку від створення проекту, тому, будь ласка, пропустіть зрозумілі вам частини.
Спочатку створіть програму Silverlight. У меню Visual Studio виберіть «Файл», «Створити», «Проект».
Виберіть програму Silverlight.
Що стосується розміщення веб-сайтів, обов'язково вкажіть сайт, який ви хочете розмістити. Тестові сторінки, які генеруються автоматично під час налагодження лише в Silverlight, не можуть запускати програми XNA, які використовують графічний процесор. (Однак це не стосується, коли ви вручну створюєте тестову сторінку.)
Після створення проекту клацніть правою кнопкою миші пункт Посилання в програмі Silverlight і виберіть пункт Додати посилання.
Виберіть «Збірка» і «Фреймворк» з меню зліва і відзначте наступні пункти. (Ще не натискайте кнопку OK)
- Microsoft.Xna.Framework
- Microsoft.Xna.Framework.Графіка
- Система.Windows.Xna
Далі виберіть «Аванс» в меню зліва, відзначте наступні пункти, і натисніть кнопку ОК.
- Microsoft.Xna.Framework.Graphics.Extensions
- Microsoft.Xna.Framework.Math
Ми вибрали мінімум, необхідний для запуску програми XNA, тому виберіть збірку для посилання відповідно до ваших потреб.
Додається посилання на збірку.
Далі ми налаштуємо код. На цей раз описується тільки мінімальна інформація, яка показує, чи правильно працювала програма XNA.
У програмі Silverlight відкрийте MainPage.xaml і додайте такий код:
<Grid x:Name="LayoutRoot" Background="White">
<!-- 追加ここから -->
<DrawingSurface Draw="DrawingSurface_Draw" />
<TextBlock x:Name="textBlockMessage"/>
<!-- 追加ここまで -->
</Grid>
DrawingSurface - це область, до якої звертається програма XNA. При виконанні подія Draw відбувається неодноразово, тому опишіть там процес малювання. Цього разу я намалюю тільки колір фону, щоб ви могли побачити, чи працює він належним чином.
textBlockMessage використовується для відображення тексту незалежно від того, чи працює програма XNA належним чином чи ні. Цього разу я вводжу його, щоб підтвердити, тому він мені не потрібен у фактичному випуску.
Потім відкрийте файл "MainPage.xaml.cs". Для початку розберемо використовувані деталі. Вказано простір імен для програми Silverlight, тому ми змінимо його для XNA. Фактично створюючи його, будь ласка, визначте його відповідно до вашої заявки.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
//using System.Windows.Input;
//using System.Windows.Media;
//using System.Windows.Media.Animation;
//using System.Windows.Shapes;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Windows.Graphics;
Далі, під час запуску, потрібно відобразити поточний режим накладання та причину, чому ви не змогли малювати текстом. Я пишу його в конструкторі, тому що знаю, коли запускається додаток Silverlight.
public MainPage()
{
InitializeComponent();
textBlockMessage.Text
= string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
GraphicsDeviceManager.Current.RenderMode.ToString(),
GraphicsDeviceManager.Current.RenderModeReason);
}
Напишіть процес малювання. У цьому випадку ми просто хочемо, щоб XNA Framework малював фон, коли відбувається подія малювання.
private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}
Запустимо налагодження.
Коли ви його запустите, він буде відображатися так, як показано на малюнку. RenderMode: Недоступний не дозволяє апаратний рендеринг, RenderModeReason:GPUAccelerationDisabled вимикає рендеринг графічного процесора. Це проблема на стороні сервера, тому спочатку її потрібно ввімкнути.
Відкрийте файл < імені проекту>TestPage.aspx з проекту ASP.NET, розміщеного в прогоні Silverlight.
Додайте "EnableGPUAcceleration" до параметра об'єкта і встановіть значення "true". Це дає стороні сервера дозвіл на використання цього додатка Silverlight для графічного процесора. (Насправді, це вирішується обробкою клієнта, але оскільки саме сервер виводить HTML, це проблема на стороні сервера.)
<body>
<form id="form1" runat="server" style="height:100%">
<div id="silverlightControlHost">
<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/DebugXna.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="5.0.61118.0" />
<param name="autoUpgrade" value="true" />
<!-- 追加ここから -->
<param name="EnableGPUAcceleration" value="true" />
<!-- 追加ここまで -->
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Microsoft Silverlight の取得" style="border-style:none"/>
</a>
</object>
<iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>
</div>
</form>
</body>
Якщо спробувати запустити його з цим, він буде схожий на фігуру. RenderModeReason тепер заблоковано безпекою. Це пов'язано з тим, що малювання графічного процесора не дозволено за замовчуванням з міркувань безпеки. Оскільки це проблема клієнта, на додаток до запуску налагодження, вам також потрібно, щоб користувач виконав наступні кроки, щоб дозволити графічному процесору малювати.
Щоб дозволити рендеринг графічного процесора, клацніть програму Silverlight правою клавішею миші та виберіть у меню пункт Silverlight.
У діалоговому вікні вибираємо вкладку «Дозволи», вибираємо відповідний сайт, а потім натискаємо кнопку «Дозволити».
Коли дозвіл буде "Дозволити", натисніть кнопку ОК.
Якщо ви налагоджуєте під час налагодження, оновлення браузера не набуває чинності, тому, якщо ви закриєте браузер і запустите його знову, ви побачите, що RenderMode стає апаратним кресленням, а також увімкнено фонове малювання XNA. Тепер ви можете створювати програми XNA досхочу.