Ladění programu pomocí XNA v programu Silverlight5

Stránky aktualizovány :
Datum vytvoření stránky :

Vysvětlení jsou vysvětlena v pořadí od vytvoření projektu, proto prosím přeskočte části, kterým rozumíte.

Nejprve vytvořte aplikaci Silverlight. V nabídce Visual Studio zvolte Soubor, Nový, Projekt.

プロジェクトの新規作成

Vyberte Aplikace Silverlight.

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

Pokud jde o hostitelské weby, nezapomeňte zadat web, který chcete hostit. Testovací stránky, které jsou automaticky generovány při ladění v samotném programu Silverlight, nemohou spustit programy XNA, které používají GPU. (To však neplatí při ručním vytvoření zkušební stránky.)

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

Po vytvoření projektu klikněte pravým tlačítkem myši na odkazy v aplikaci Silverlight a vyberte Přidat odkaz.

参照の追加

Vyberte "Sestavení" a "Rámec" z nabídky vlevo a zkontrolujte následující položky. (Tlačítko OK zatím nemačkejte)

  • Microsoft.Xna.Framework
  • Microsoft.Xna.Framework.Graphics
  • System.Windows.Xna

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

Dále vyberte v nabídce vlevo možnost "Advance", zkontrolujte následující položky a stiskněte tlačítko OK.

  • Microsoft.Xna.Framework.Graphics.Extensions
  • Microsoft.Xna.Framework.Math

Vybrali jsme minimum potřebné ke spuštění programu XNA, takže vyberte sestavu, na kterou chcete odkazovat, podle vašich potřeb.

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

Přidá se odkaz na sestavu.

参照一覧

Dále vyladíme kód. Tentokrát je popsáno pouze minimum informací, které ukazují, zda program XNA pracoval správně.

V aplikaci Silverlight otevřete soubor MainPage.xaml a přidejte následující kód:

<Grid x:Name="LayoutRoot" Background="White">
  <!-- 追加ここから -->
  <DrawingSurface Draw="DrawingSurface_Draw" />
  <TextBlock x:Name="textBlockMessage"/>
  <!-- 追加ここまで -->
</Grid>

DrawingSurface je oblast, do které program XNA kreslí. Při spuštění se událost Draw vyskytuje opakovaně, proto zde popište proces kreslení. Tentokrát nakreslím pouze barvu pozadí, abyste viděli, zda funguje správně.

textBlockMessage se používá k zobrazení textu, zda program XNA pracuje správně nebo ne. Tentokrát to dávám, abych to potvrdil, takže to nepotřebuji ve skutečném vydání.

Potom otevřete soubor "MainPage.xaml.cs". Nejprve vyřešíme části použití. Jmenný prostor pro aplikaci Silverlight je specifikován, takže jej změníme pro XNA. Při jeho samotném vytváření jej prosím definujte podle vaší aplikace.

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;

Dále při spuštění chcete zobrazit aktuální režim prolnutí a důvod, proč jste nemohli kreslit v textu. Píšu to do konstruktoru, protože vím, kdy je aplikace Silverlight spuštěna.

public MainPage()
{
  InitializeComponent();

  textBlockMessage.Text
    = string.Format("RenderMode:{0}\r\nRenderModeReason:{1}",
                    GraphicsDeviceManager.Current.RenderMode.ToString(),
                    GraphicsDeviceManager.Current.RenderModeReason);
}

Napište proces kreslení. V tomto případě pouze chceme, aby XNA Framework vykreslil pozadí, když dojde k události kreslení.

private void DrawingSurface_Draw(object sender, DrawEventArgs e)
{
  GraphicsDeviceManager.Current.GraphicsDevice.Clear(new Color(0x64, 0x95, 0xED));
}

Pojďme spustit ladění.

デバッグ実行。

Když jej spustíte, zobrazí se, jak je znázorněno na obrázku. RenderMode: Nedostupné neumožňuje hardwarové vykreslování, RenderModeReason:GPUAccelerationDisabled zakáže vykreslování GPU. Jedná se o problém na straně serveru, takže jej musíte nejprve povolit.

描画ができない

Otevřete soubor < název projektu>TestPage.aspx z projektu ASP.NET hostovaného v běhu programu Silverlight.

TestPage.aspx を開く

Přidejte "EnableGPUAcceleration" do parametru objektu a nastavte hodnotu na "true". To dává serverové oprávnění pro tuto aplikaci Silverlight používat GPU. (Ve skutečnosti je to vyřešeno zpracováním klienta, ale protože je to server, který vydává HTML, je to problém na straně serveru.)

<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>

Pokud se pokusíte spustit s tímto, bude to vypadat jako obrázek. RenderModeReason je nyní SecurityBlocked. Je to proto, že kreslení GPU není ve výchozím nastavení z bezpečnostních důvodů povoleno. Vzhledem k tomu, že se jedná o problém klienta, kromě spuštění ladění je také nutné, aby uživatel provedl následující kroky, aby GPU mohl kreslit.

RenderModeReason が SecurityBlocked に変化

Chcete-li povolit vykreslování pomocí GPU, klikněte pravým tlačítkem myši na aplikaci Silverlight a v nabídce vyberte možnost Silverlight.

Silverlight を選択

V dialogovém okně, které se otevře, vyberte kartu "Oprávnění", vyberte příslušný web a klikněte na tlačítko "Povolit".

アクセス許可

Pokud je oprávnění "Povolit", klikněte na tlačítko OK.

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

Pokud ladíte během ladění, aktualizace prohlížeče se neprojeví, takže pokud zavřete prohlížeč a znovu jej spustíte, uvidíte, že RenderMode se stane hardwarovým výkresem a XNA vykreslování pozadí je také povoleno. Nyní můžete vytvářet programy XNA podle libosti.

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