Отстраняване на грешки в програма с помощта на XNA в Silverlight5

Страницата се актуализира :
Дата на създаване на страница :

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

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

プロジェクトの新規作成

Изберете Приложение на Silverlight.

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

Що се отнася до хостинг уеб сайтове, не забравяйте да посочите сайта, който искате да хоствате. Тестовите страници, които се генерират автоматично при отстраняване на грешки само в Silverlight, не могат да изпълняват XNA програми, които използват графичния процесор. (Това обаче не важи, когато ръчно създавате тестова страница.)

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

След като проектът е създаден, щракнете с десния бутон върху Препратки в приложението Silverlight и изберете Добавяне на препратка.

参照の追加

Изберете "Монтаж" и "Рамка" от менюто вляво и проверете следните елементи. (Все още не натискайте бутона OK)

  • Майкрософт.Ксна.Рамка
  • 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 деактивира рендирането на графичния процесор. Това е проблем от страна на сървъра, така че първо трябва да го разрешите.

描画ができない

Отворете файла < име на проекта>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 を選択

В диалоговия прозорец, който се отваря, изберете раздела "Разрешения", изберете подходящия сайт и след това щракнете върху бутона "Разреши".

アクセス許可

Когато разрешението е "Разреши", щракнете върху бутона OK.

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

Ако отстранявате грешки по време на отстраняване на грешки, обновяването на браузъра не влиза в сила, така че ако затворите браузъра и го стартирате отново, ще видите, че RenderMode става хардуерен чертеж и XNA фонов чертеж също е активиран. Сега можете да създавате XNA програми за съдържанието на сърцето си.

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