Ladění programu pomocí XNA v programu Silverlight5
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.
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.)
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.
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.
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.
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.