Отладка программы с помощью XNA в Silverlight5

Страница обновлена :
Дата создания страницы :

Объяснения объясняются в порядке создания проекта, поэтому, пожалуйста, пропустите части, которые вы понимаете.

Сначала создайте приложение Silverlight. В меню Visual Studio выберите Файл, Создать, Проект.

プロジェクトの新規作成

Выберите Приложение Silverlight.

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

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

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

После создания проекта щелкните правой кнопкой мыши Ссылки в приложении Silverlight и выберите Добавить ссылку.

参照の追加

Выберите «Сборка» и «Структура» в меню слева и проверьте следующие пункты. (Пока не нажимайте кнопку OK)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • Система.Windows.Xna

参照するアセンブリを選択

Затем выберите «Вперед» в меню слева, проверьте следующие пункты и нажмите кнопку OK.

  • 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 отключает рендеринг GPU. Это проблема на стороне сервера, поэтому вам нужно сначала включить ее.

描画ができない

Откройте файл имени < проекта>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 теперь securityblocked. Это связано с тем, что рисование графического процессора не разрешено по умолчанию по соображениям безопасности. Поскольку это проблема клиента, в дополнение к запуску отладки вам также необходимо, чтобы пользователь выполнил следующие шаги, чтобы разрешить графическому процессору рисовать.

RenderModeReason が SecurityBlocked に変化

Чтобы разрешить отрисовку графического процессора, щелкните правой кнопкой мыши приложение Silverlight и выберите в меню команду Silverlight.

Silverlight を選択

В открывшемся диалоговом окне выберите вкладку «Разрешения», выберите соответствующий сайт, а затем нажмите кнопку «Разрешить».

アクセス許可

Когда разрешение будет "Разрешить", нажмите кнопку ОК.

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

Если вы выполняете отладку во время отладки, обновление браузера не вступает в силу, поэтому, если вы закроете браузер и запустите его снова, вы увидите, что RenderMode становится аппаратным рисованием и фоновое рисование XNA также включено. Теперь вы можете создавать программы XNA по своему усмотрению.

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