Налагодження програми за допомогою XNA в Silverlight5

Сторінка оновлюється :
Дата створення сторінки :

Пояснення пояснюються по порядку від створення проекту, тому, будь ласка, пропустіть зрозумілі вам частини.

Спочатку створіть програму Silverlight. У меню Visual Studio виберіть «Файл», «Створити», «Проект».

プロジェクトの新規作成

Виберіть програму Silverlight.

Silverlight アプリケーションを選択

Що стосується розміщення веб-сайтів, обов'язково вкажіть сайт, який ви хочете розмістити. Тестові сторінки, які генеруються автоматично під час налагодження лише в Silverlight, не можуть запускати програми XNA, які використовують графічний процесор. (Однак це не стосується, коли ви вручну створюєте тестову сторінку.)

ホストする Web サイトの作成

Після створення проекту клацніть правою кнопкою миші пункт Посилання в програмі 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.

TestPage.aspx を開く

Додайте "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 тепер заблоковано безпекою. Це пов'язано з тим, що малювання графічного процесора не дозволено за замовчуванням з міркувань безпеки. Оскільки це проблема клієнта, на додаток до запуску налагодження, вам також потрібно, щоб користувач виконав наступні кроки, щоб дозволити графічному процесору малювати.

RenderModeReason が SecurityBlocked に変化

Щоб дозволити рендеринг графічного процесора, клацніть програму Silverlight правою клавішею миші та виберіть у меню пункт Silverlight.

Silverlight を選択

У діалоговому вікні вибираємо вкладку «Дозволи», вибираємо відповідний сайт, а потім натискаємо кнопку «Дозволити».

アクセス許可

Коли дозвіл буде "Дозволити", натисніть кнопку ОК.

アクセス許可が「許可」に代わる

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

ハードウェアによる描画が有効